Для некоторых сценариев 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 и новее, поэтому я установил PS 5.1 на свой сервер Win 2012, но все равно не повезло.
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
Есть идеи, что происходит?
Похоже, вы не используете последнюю сборку PS 5.1.
Это должно быть что-то вроде 5.1.17xxx.xxx
.
Как вы обновляли PowerShell?
Я бы порекомендовал получить новейшую версию WPF 5.1 из MS Docs
Обновление
. Покопавшись, оказалось, что для сервера 2012 и ниже наивысший доступный номер сборки - 5.1.14xxx из установщика WPF 5.1. Если он не обновляется через обновления Windows, я не нашел никакой документации, в которой говорилось бы, что вы можете обновить сборку.
Единственный способ, который я могу придумать для решения этой проблемы, - это установить PowerShell 6 (PowerShell Core ). Я только что протестировал, и он отлично работает и в Core. Он устанавливается рядом с вашей Windows PowerShell и использует для запуска pwsh.exe.
Однако обратите внимание, что не все модули доступны для Core, поэтому, если вы используете модуль, в котором у вас его нет для ядра вы можете использовать модуль совместимости Windows PowerShell
В моей системе (не Windows Server) команда
Get-ChildItem -LiteralPath
работает как предполагалось. Может, вы попробуете это?