WindowsCompatibility icon indicating copy to clipboard operation
WindowsCompatibility copied to clipboard

Add-WindowsPSModulePath adds empty entries in certain cases.

Open gwojan opened this issue 7 years ago • 1 comments

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
}

gwojan avatar Nov 15 '18 19:11 gwojan

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.

BrucePay avatar Nov 26 '18 19:11 BrucePay