The method `GetLookupDirectoryPaths` always returns the cached instance of path collection. However, the returned collection gets mutated in `CommandPathSearch.ResolveCurrentDirectoryInLookupPaths` to resolve the relative paths such as `.\tools` based on the user's current working directory `$PWD`, so for example, `.\tools` gets replaced with `cwd-1\tools` in the cached instance. Then, when the user changes to a different working directory `cwd-2`, command discovery won't find the executable or ps1 script under `cwd-2/tools` as expected, but those executables under `cwd-1\tools` will always be discoverable no matter what the `$PWD` is. That behavior is incorrect.
This pull request improves the caching logic of `GetLookupDirectoryPaths` and makes it return a copy of the path collection, so the mutation happens to the returned copy, and the cached instance is kept intact. So, for every command search, the `CommandPathSearch` will resolve relative paths against the `$PWD` that the user is located at that time.
Ensure Get-Error does not hang when attempting to serialize an exception
that contains a property whose type is an array of System.Type
instances. Also ensures that primitive types like System.Int32,
System.Boolean as well as System.String is formatted as a string rather
than an object with properties.
* Add CI for win-arm64
* Add common function to test for windows arm64
* Update because string where items need investigation
---------
Co-authored-by: Aditya Patwardhan <adityap@microsoft.com>
Add additional check for each component of PSModulePath (that is set for WinPS process) - if it is has pwsh.exe in the parent directory, then it is considered another PS Core installation and this location is also filtered out.
* Filter PSModulePath when starting PS 5.1. Removing PS-Core-specific paths from PSModulePath of WinCompat process (Windows PS).
* Make implicit WinCompat respect NoClobber and Scope parameters
* Add ErrorAction.Ignore when searching for WinPSCompatSession
* Remove BOM, insert newline at EOF
* Correct case of $MyInvocation special variable
* Correct case of $OFS special variable
* Correct case of $NestedPromptLevel special variable
* Correct case of $Matches special variable
* Correct case of $LASTEXITCODE special variable
* Correct case of $StackTrace special variable
* Correct case of $args special variable
* Correct case of $this special variable
* Correct case of $input special variable
* Correct case of $PSCmdlet special variable
* Correct case of $error special variable
* Correct case of $PSDefaultParameterValues special variable
* Correct case of $PSScriptRoot special variable
* Correct case of $PWD special variable
* Correct case of $null special variable
* Correct case of $true special variable
* Correct case of $false special variable
* Correct case of $PSModuleAutoLoadingPreference special variable
* Correct case of $IsLinux special variable
* Correct case of $IsMacOS special variable
* Correct case of $IsWindows special variable
* Correct case of $IsCoreCLR special variable
* Correct case of $DebugPreference special variable
* Correct case of $VerbosePreference special variable
* Correct case of $InformationPreference special variable
* Correct case of $ExecutionContext special variable
* Correct case of $HOME special variable
* Correct case of $Host special variable
* Correct case of $PID special variable
* Correct case of $PSCulture special variable
* Correct case of $PSHOME special variable
* Correct case of $PSUICulture special variable
* Correct case of $PSVersionTable special variable
* Fix false positives