LiteralPath 在 PowerShell 5.1 Windows Server 2012 上不起作用

LiteralPath 在 PowerShell 5.1 Windows Server 2012 上不起作用

对于某些 PS 脚本,我需要 Get-ChildItem 与 '\\?\...' 一起使用,我尝试使用原始版本 4.0,但没有成功:

Get-ChildItem : Illegal characters in path.

我在我的电脑(Win 10 1703)上尝试过并且它运行正常:

Get-ChildItem -LiteralPath '\\?\C:\'


    Directory: \\?\C:


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
d-----       03/12/2018     16:23                driver
d-----       13/11/2018     12:14                EmpirumPackages
d-----       13/11/2018     10:27                FibocomLog
d-----       15/11/2018     16:01                Intel
d-----       15/06/2018     17:27                PerfLogs
d-r---       18/12/2018     08:12                Program Files
d-r---       12/12/2018     10:59                Program Files (x86)
d-r---       18/11/2018     07:06                Users
d-----       14/12/2018     08:36                Windows
-a----       18/12/2018     08:35        9756932 action.log
-a----       13/11/2018     10:11         655360 alertlog.dat
-a----       13/11/2018     12:14          15361 Thininstaller.log

(我复制粘贴了命令,所以这里没问题)

我从某处看到它从 PS 5.0 开始运行,因此我在我的 Win 2012 服务器上安装了 PS 5.1,但仍然没有成功。

Get-ChildItem : Illegal characters in path.

这是我的服务器输出:

Name                           Value
----                           -----
PSVersion                      5.1.14409.1005
PSEdition                      Desktop
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0...}
BuildVersion                   10.0.14409.1005
CLRVersion                     4.0.30319.34014
WSManStackVersion              3.0
PSRemotingProtocolVersion      2.3
SerializationVersion           1.1.0.1

我的电脑输出

Name                           Value
----                           -----
PSVersion                      5.1.15063.1478
PSEdition                      Desktop
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0...}
BuildVersion                   10.0.15063.1478
CLRVersion                     4.0.30319.42000
WSManStackVersion              3.0
PSRemotingProtocolVersion      2.3
SerializationVersion           1.1.0.1

知道发生什么事了吗?

答案1

看起来您没有运行最新的 PS 5.1 版本。它应该是这样的5.1.17xxx.xxx

你是如何更新你的 PowerShell 的?
我建议从微软文档

更新

经过一番挖掘,似乎对于 Server 2012 及以下版本,可用的最高内部版本号是 WPF 5.1 安装程序中的 5.1.14xxx。如果它不通过 Windows 更新进行更新,我找不到任何说明您可以更新内部版本的文档。

我能想到的唯一解决这个问题的方法是安装 PowerShell 6(PowerShell Core)。我刚刚测试过,它在 Core 中也能正常工作。它与 Windows PowerShell 并排安装,并使用 pwsh.exe 启动。

但是请注意,并非所有模块都可用于核心,因此如果您使用的模块不是核心原生模块,则可以使用Windows PowerShell 兼容性模块

答案2

在我的系统(不是 Windows Server)上,命令

Get-ChildItem -LiteralPath 

按照预期工作。也许你可以尝试一下?

相关内容