PowerShell / WindowsCompatibility

Module that allows Windows PowerShell Modules to be used from PSCore6
Other
137 stars 33 forks source link

Add-WindowsPSModulePath adds empty entries in certain cases. #62

Open gwojan opened 5 years ago

gwojan commented 5 years ago

Add-WindowsPSModulePath adds empty entries if any of the environment variables contain empty strings like path;;path or [System.Environment]::GetEnvironmentVariable('PSModulePath', [System.EnvironmentVariableTarget]::User) is null or empty.

After running Add-WindowsPSModulePath:

4143> $Env:PSModulePath -split [System.IO.Path]::PathSeparator
C:\Users\bubba\Documents\PowerShell\Modules
C:\Program Files\PowerShell\Modules
c:\program files\powershell\6\Modules
C:\WINDOWS\system32\WindowsPowerShell\v1.0\Modules
C:\Users\bubba\Documents\WindowsPowerShell\Modules
C:\Program Files\WindowsPowerShell\Modules

C:\Program Files (x86)\Microsoft SQL Server\130\Tools\PowerShell\Modules\
PS ~
4144>

This can be mitigated by changing

if ($pathTable[$path])
{
    continue
}

to


if ([string]::IsNullOrEmpty($path) -or $pathTable[$path])
{
    continue
}
BrucePay commented 5 years ago

The design was to merge the paths exactly as they are but eliminating duplicates. If there are empty elements in any of the components, they get copied into resulting path. But adding spaces because one of the components is $null is unacceptable so we should fix this. The simplest solution is

if ($path -or $pathTable[$path])
{
    continue
}

Since null and the empty string are both false.