对于某些 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
按照预期工作。也许你可以尝试一下?