2013-01-18 12 views
6

Ho uno script che include le seguenti impostazioni che restituiscono un risultato errato se utilizzo la schermata dei parametri obbligatori. Sembra che non riesca a fare qualche tipo di verifica del tipo o di casting sul mio input. Come posso risolverlo?Powershell obbligatorio bool sempre true

param ([Parameter(Mandatory=$true)] [bool]$autoinstall) 

if ($autoinstall ) 
{ 
    echo "Autoinstall true" 
} 
else 
{ 
    echo "Autoinstall false" 
} 

Questo funziona perfettamente se lo chiamo io con. \ MyScript.ps1 -autoinstall $ false ma la variabile $ autoinstall è sempre vero indipendentemente da ciò che mi passa se uso la richiesta di password obbligatoria ed entro '$ false' .

EDIT:

Utilizzando un interruttore non funziona per me. Ho davvero bisogno di avere sia script sia la funzione parametrica obbligatoria per le scorciatoie utente per uso immediato.

risposta

8

Il problema si verifica perché l'ingresso viene interpretato come una stringa e si sta vedendo i risultati di coercizione di PowerShell di stringa per bool esempio:

59> [bool]'0' 
True 

60> [bool]'false' 
True 

61> [bool]'False' 
True 

62> [bool]'$false' 
True 

Per ottenere il percorso "falso" da eseguire, è sufficiente premere Invio quando viene richiesto il parametro, ad esempio:

63> [bool]'' 
False 
5

Perché non usare l'interruttore? Prova questo:

param ([switch]$autoinstall) 

if ($autoinstall ) 
{ 
    echo "Autoinstall true" 
} 
else 
{ 
    echo "Autoinstall false" 
} 

uscita:

[20:40:46] PS-ADMIN C:\Users\Graimer\Desktop> .\Untitled4.ps1 
Autoinstall false 
[20:42:36] PS-ADMIN C:\Users\Graimer\Desktop> .\Untitled4.ps1 -autoinstall 
Autoinstall true 
[20:42:38] PS-ADMIN C:\Users\Graimer\Desktop> .\Untitled4.ps1 -autoinstall:$true 
Autoinstall true 
[20:42:41] PS-ADMIN C:\Users\Graimer\Desktop> .\Untitled4.ps1 -autoinstall:$false 
Autoinstall false 
+0

Questo non funziona per me. Devo inviare una singola scorciatoia che utilizza una serie di parametri obbligatori per controllare il comportamento dell'app. Ho avuto una nota in tal senso nella versione originale del mio post .. La modificherò di nuovo. –

+0

Oggi mi sento un po 'stupido, perché non riesco a capire il problema :) Un interruttore è un booleano obbligatorio. O lo specifichi o non lo fai, e in uno script puoi specificare il suo valore. L'interruttore è perfetto nei miei occhi. Vedere la sezione di output aggiornata nella mia risposta per proof-of-concept. –

+0

Lo script deve essere in grado di essere chiamato, indipendentemente dagli altri parametri della riga di comando che sono già presenti sul collegamento, e richiedere tramite un parametro obbligatorio la visualizzazione di un valore. Prova il tuo script con un parametro obbligatorio per lo switch e non inserire un valore nella riga di comando. Vedrai di cosa sto parlando. –

Problemi correlati