Saltar al contenido

Cómo pasar valores booleanos a un script de PowerShell desde un símbolo del sistema

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 -Commandque 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.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *