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 ( -Unifyspecificato 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 $trueesplicitamente a un [switch]parametro denominato -Unifyora 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 0o 1fa 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 -Commandstai effettivamente passando un pezzo di codice PowerShell , che viene quindi valutato come al solito - e all'interno di PowerShell passa $truee $falsefunziona (ma non true e false, come ora anche accettato con -File).
Avvertenze :
L'utilizzo -Commandpuò comportare un'ulteriore interpretazione degli argomenti, ad esempio se contengono $caratteri. (con -File, gli argomenti sono letterali ).
L'utilizzo -Commandpuò comportare un codice di uscita diverso .
Per i dettagli, vedere questa risposta e questa risposta .