Si te encuentras con alguna parte que no entiendes puedes dejarlo en la sección de comentarios y te ayudaremos rápidamente.
Solución:
Un uso más claro podría ser usar parámetros de cambio en su lugar. Entonces, solo la existencia del parámetro Unificar significaría que se configuró.
Al igual que:
param (
[int] $Turn,
[switch] $Unify
)
Parece que powershell.exe no evalúa completamente los argumentos del script cuando el -File
se utiliza el parámetro. En particular, el $false
argumento está siendo tratado como un string valor, de manera similar al ejemplo siguiente:
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
En lugar de usar -File
tu podrías intentar -Command
que evaluará la llamada como script:
CMD> powershell.exe -NoProfile -Command .RunScript.ps1 -Turn 1 -Unify $false
Turn: 1
Unify: False
Como sugiere David, usar un argumento de cambio también sería más idiomático, simplificando la llamada al eliminar la necesidad de pasar un valor booleano explícitamente:
CMD> powershell.exe -NoProfile -File .RunScript.ps1 -Turn 1 -Unify
Turn: 1
Unify: True
Intente establecer el tipo de su parámetro en [bool]
:
param
(
[int]$Turn = 0
[bool]$Unity = $false
)
switch ($Unity)
$true "That was true."; break
default "Whatever it was, it wasn't true."; break
Este ejemplo por defecto $Unity
a $false
si no se proporciona ninguna entrada.
Uso
.RunScript.ps1 -Turn 1 -Unity $false
Recuerda que puedes dar recomendación a esta noticia si si solucionó tu problema.