Для узагальнення та доповнення існуючих відповідей станом на Windows PowerShell v5.1 / PowerShell Core 7.0.0-preview.4:
Відповідь Девіда Мохундро справедливо вказує на те, що замість [bool]
параметрів слід використовувати [switch]
параметри в PowerShell , де присутність проти відсутності імені комутатора ( -Unify
вказаний проти не вказаний) означає його значення , що змушує усунути початкову проблему.
Однак іноді вам може знадобитися явно передати значення комутатора , особливо якщо ви програмуєте командний рядок програмно :
У PowerShell Ядра , то вихідна задача (описаний в відповідь імператора XLII в ) була фіксованою .
Тобто, щоб $true
явно передати [switch]
параметр з назвою, -Unify
тепер ви можете написати:
pwsh -File .\RunScript.ps1 -Unify:$true # !! ":" separates name and value, no space
Можна використовувати такі значення: $false
, false
, $true
, true
, але зауважте , що передача 0
або 1
ж НЕ працювати.
Зверніть увагу, як ім'я комутатора відокремлено від значення :
і між ними не повинно бути пробілів .
Примітка. Якщо ви оголосили [bool]
параметр замість а[switch]
(який, як правило, не слід), ви повинні використовувати той самий синтаксис; хоча це -Unify $false
має працювати, в даний час це не так - див. цю проблему GitHub .
У Windows PowerShell , в оригінальній проблема НЕ вирішена , і - з огляду на , що Windows PowerShell більше не активно розвивається - навряд чи виправлена.
Вирішення проблеми запропоновано у відповіді LarsWA - навіть якщо вона заснована на офіційній темі довідки з цього письма - не працює в v5.1
- Цей випуск GitHub просить виправити документацію, а також надає тестову команду, яка показує неефективність способу вирішення.
Використання -Command
замість цього -File
- єдиний ефективний спосіб вирішення :
:: # From cmd.exe
powershell -Command "& .\RunScript.ps1 -Unify:$true"
Завдяки цьому -Command
ви ефективно передаєте частину коду PowerShell , який потім оцінюється як зазвичай - і всередині PowerShell проходить $true
і $false
працює (але не true
і false
, як зараз прийнято також з -File
).
Коваджі :
Використання -Command
може призвести до додаткової інтерпретації ваших аргументів, наприклад, якщо вони містять $
символи. (з-File
, аргументи буквені ).
Використання -Command
може призвести до а іншого коду виходу .
Детальніше див. Цю відповідь та цю відповідь .