Похоже, что powershell.exe не полностью оценивает аргументы скрипта при использовании параметра -File
.В частности, аргумент $false
обрабатывается как строковое значение, аналогично приведенному ниже примеру:
PS> function f( [bool]$b ) { $b }; f -b '$false'
f : Cannot process argument transformation on parameter 'b'. Cannot convert value
"System.String" to type "System.Boolean", parameters of this type only accept
booleans or numbers, use $true, $false, 1 or 0 instead.
At line:1 char:36
+ function f( [bool]$b ) { $b }; f -b <<<< '$false'
+ CategoryInfo : InvalidData: (:) [f], ParentContainsErrorRecordException
+ FullyQualifiedErrorId : ParameterArgumentTransformationError,f
Вместо использования -File
вы можете попробовать -Command
, который оценитвызов как сценарий:
CMD> powershell.exe -NoProfile -Command .\RunScript.ps1 -Turn 1 -Unify $false
Turn: 1
Unify: False
Как предполагает Дэвид , использование аргумента switch также будет более идиоматичным, упрощая вызов, устраняя необходимость явной передачи логического значения:
CMD> powershell.exe -NoProfile -File .\RunScript.ps1 -Turn 1 -Unify
Turn: 1
Unify: True