В Windows PowerShell невозможно передать логическое значение, когда параметр CLI -File
используется - с тех пор это исправлено в PowerShell Core [1] .
Используйте обходной путь , который JosefZ рекомендует:
Использование -Command
(-c
) вместо -File
заставляет PowerShell обрабатывать аргументы как исходный код PowerShell , а не как буквальные аргументы , в этом случае $false
правильно распознается (другие параметры CLI для краткости опущены).
powershell -c "& \"%~dp0\foo.ps1\" -Name 'abc' -MySwitch:$false"
Обратите внимание на необходимость использования &
для вызова файла сценария, поскольку его путь указан в кавычках.Также обратите внимание, что PowerShell ожидает встроенные символы "
.в командной строке экранировать как \"
(не как `"
или ""
, как это работает внутри PowerShell).
PowerShell Coreподдерживает следующие значения в качестве логических значений при использовании -File
: $true
, $false
, true
, false
(а также $null
, но его интерпретация отличается: сценарии (в том числе с -File
) и функцииинтерпретировать его как $false
, тогда как командлеты интерпретируют его как $true
(!)).
Обратите внимание, что с -Command
- и, следовательно, во всем коде PowerShell - true
и false
, не not работают, но 0
и 1
делают.
К сожалению, если вы передаете неподдерживаемое значение, вы получаете одно и то же сообщение об ошибке во всех сценариях, что в сценарии -File
вводит в заблуждение, что 0
и1
работа тоже.