Translating PSDrive-based path arguments for external (native) executables is overzealous (PSNativePSPathResolution)
See original GitHub issuePR #12386 introduced experimental feature PSNativePSPathResolution, which as of (at least) PowerShell Core 7.1.0-preview.7 has become a default feature.
- For problems with this feature in general, see #13644
Its purpose is to translate PowerShell-drive-based paths to native filesystem paths, because external executables only understand the latter.
This translation is currently overzealous in that it nonsensically translates an argument that starts with : (which clearly isn’t a drive-based path).
@DHowett has pinpointed the problematic behavior to: https://github.com/PowerShell/PowerShell/blob/3effa204103460c996a8612aa70718fdf924047d/src/System.Management.Automation/engine/NativeCommandParameterBinder.cs#L388-L406
Steps to reproduce
On Unix:
/bin/echo :foo | Should -Be ':foo'
On Windows:
cmd /c echo :foo | Should -Be ':foo'
Expected behavior
The test should succeed.
Actual behavior
The test fails, because the the current location’s path is unexpectedly prepended to :
Expected strings to be the same, but they were different. Expected length: 4 Actual length: 44 Strings differ at index 0.
Expected: ':foo' But was: '/Users/jdoe...'
Environment data
PowerShell Core 7.1.0-preview.7
Issue Analytics
- State:
- Created 3 years ago
- Comments:24 (7 by maintainers)

Top Related StackOverflow Question
I do not believe that
Issue-Questionis the appropriate label for this issue. This is a significant regression in native tool use from one preview release to another, and we are at risk of shipping with it.For 7.1, I’m going to revert the change to make this non-experimental