Per riassumere e completare le risposte esistenti , a partire da Windows PowerShell v5.1 / PowerShell Core 7.0.0-preview.4:
La risposta di David Mohundro giustamente sottolinea che al posto dei [bool]
parametri dovresti usare i [switch]
parametri in PowerShell , dove la presenza o l'assenza del nome dello switch ( -Unify
specificato o non specificato) implica il suo valore , il che fa scomparire il problema originale.
Tuttavia, a volte potresti ancora dover passare il valore dello switch in modo esplicito , in particolare se stai costruendo una riga di comando a livello di codice :
In PowerShell Core , il problema originale (descritto nella risposta di Emperor XLII ) è stato risolto .
Cioè, per passare $true
esplicitamente a un [switch]
parametro denominato -Unify
ora puoi scrivere:
pwsh -File .\RunScript.ps1 -Unify:$true # !! ":" separates name and value, no space
I seguenti valori possono essere utilizzati: $false
, false
, $true
, true
, ma nota che passa 0
o 1
fa no lavoro.
Nota come il nome dello switch è separato dal valore con :
e non devono esserci spazi vuoti tra i due.
Nota: se dichiari un [bool]
parametro invece di un [switch]
(cosa che generalmente non dovresti), devi usare la stessa sintassi; anche se -Unify $false
dovrebbe funzionare, attualmente non funziona - vedi questo problema di GitHub .
In Windows PowerShell , il problema originale persiste e, dato che Windows PowerShell non è più sviluppato attivamente, è improbabile che venga risolto.
:: # From cmd.exe
powershell -Command "& .\RunScript.ps1 -Unify:$true"
Con -Command
stai effettivamente passando un pezzo di codice PowerShell , che viene quindi valutato come al solito - e all'interno di PowerShell passa $true
e $false
funziona (ma non true
e false
, come ora anche accettato con -File
).
Avvertenze :
L'utilizzo -Command
può comportare un'ulteriore interpretazione degli argomenti, ad esempio se contengono $
caratteri. (con -File
, gli argomenti sono letterali ).
L'utilizzo -Command
può comportare un codice di uscita diverso .
Per i dettagli, vedere questa risposta e questa risposta .