WindowsCompatibility
WindowsCompatibility copied to clipboard
Add-WindowsPSModulePath adds empty entries in certain cases.
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
}
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.