Я хочу запустить следующую команду из Powershell 5, но заставить ее выполняться с помощью Powershell 6:
$PSVersionTable.PSVersion.Major
Как это может быть сделано?
Ожидаемое возвращаемое значение команды должно быть «6».
Я получаю это:
pwsh -command "$PSVersionTable.PSVersion.Major"
System.Collections.Hashtable.PSVersion.Major : The term 'System.Collections.Hashtable.PSVersion.Major' is not recognized as the name of a cmdlet, function, script file, or operable program.
Check the spelling of the name, or if a path was included, verify that the path is correct and try again.
At line:1 char:1
+ System.Collections.Hashtable.PSVersion.Major
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (System.Collections.\u2026ble.PSVersion.Major:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException
Проблема в двойных кавычках. PowerShell 5 использует интерполяцию строки перед передачей ее в pwsh
. Итак, что вы видите:
pwsh -command "$PSVersionTable.PSVersion.Major"
На самом деле передается как:
pwsh -command "System.Collections.Hashtable.PSVersion.Major.PSVersion.Major"
Решение состоит в использовании одинарных кавычек (которые «выключают» интерполяцию):
pwsh -command '$PSVersionTable.PSVersion.Major'