PR #12386 introduced experimental feature PSNativePSPathResolution, which as of (at least) PowerShell Core 7.1.0-preview.7 has become a default feature.
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:
|
if (path.Contains(':')) |
|
{ |
|
LocationGlobber globber = new LocationGlobber(context.SessionState); |
|
try |
|
{ |
|
ProviderInfo providerInfo; |
|
|
|
// replace the argument with resolved path if it's a filesystem path |
|
string pspath = globber.GetProviderPath(path, out providerInfo); |
|
if (string.Equals(providerInfo.Name, FileSystemProvider.ProviderName, StringComparison.OrdinalIgnoreCase)) |
|
{ |
|
path = pspath; |
|
} |
|
} |
|
catch |
|
{ |
|
// if it's not a provider path, do nothing |
|
} |
|
} |
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
PR #12386 introduced experimental feature
PSNativePSPathResolution, which as of (at least) PowerShell Core 7.1.0-preview.7 has become a default feature.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:
PowerShell/src/System.Management.Automation/engine/NativeCommandParameterBinder.cs
Lines 388 to 406 in 3effa20
Steps to reproduce
On Unix:
On Windows:
Expected behavior
The test should succeed.
Actual behavior
The test fails, because the the current location's path is unexpectedly prepended to
:Environment data