2011-08-29 15 views
7

Sono abbastanza sicuro di non avere altre opzioni oltre a quello che ho scoperto, ma volevo scegliere il cervello di internet collettivo.Come contrassegnare un parametro di commutazione come obbligatorio in Powershell

Io preferisco usare un [interruttore] parametro quando passa i valori booleani di funzioni personalizzate. Tuttavia, ho alcuni casi in cui volevo contrassegnare il parametro switch come obbligatorio. Questo può essere effettuato opzionalmente tramite [parametro (obbligatorio = $ true)] sul parametro. Tuttavia, non mi piace il prompt dell'interfaccia utente che appare. Preferisco di gran lunga fare un'eccezione.

Tuttavia, un interruttore può essere vero o falso e la proprietà "IsPresent" non fa alcuna distinzione. Se mi passa un parametro switch come -example: $ false, l'interruttore riferisce che $ example.IsPresent è falso!

Ho fatto ricorso a un [bool]. Ad esempio:

param 
(
    [bool]$theValue = $(throw('You didn't specify the value!')) 
); 

Sono disponibili altri trucchi?

+0

Perché non avere due interruttori? 'example' e' exampleOff'. Quindi, quando nessuno dei due 'IsPresent' lancia un errore. – jpaugh

risposta

17

In modo un parametro switch è sempre obbligatoria. Se non lo specifichi, ottiene un valore di falso. Se lo si specifica (-var) ottiene un valore true e se si specifica anche il valore (-var:$false) ottiene il valore specificato.

Non riesco a pensare a una situazione in cui è obbligatorio specificare un interruttore. Se non si specifica, è falso. Semplice come quella.

Penso che ciò che si desidera è di citare in particolare il valore del parametro per essere vero o falso? Se questo è il caso, la versione bool che si parla è quello che vorrei andare per, se funziona allo stesso modo con switch troppo:

param([switch]$a = $(throw "You didn't specify the value")) 

E anche per quanto riguarda $example.IsPresent - So che non è intuitivo/rotto, ma è uguale al valore della variabile switch stessa. È così che il costruttore Switch Paramater è definito e l'unica struttura che ha è il IsPresent:

Crea un nuovo oggetto SwitchParameter che include un valore booleano che identifica se l'interruttore è presente.

http://msdn.microsoft.com/en-us/library/system.management.automation.switchparameter.ctor%28v=vs.85%29.aspx

+0

Se il messaggio di eccezione è ciò che ti dà fastidio, questo è il meglio che otterrai. –

+1

Oops! Avevo erroneamente concluso che il lancio dell'errore quando si utilizzava "Switch" nell'elenco dei parametri non funzionava. Ho provato di nuovo questo, e sembra bello andare. La risposta di Manojlds è accurata e molto ben dettagliata. –

+0

-var: $ false era quello che stavo cercando. Grazie! –

Problemi correlati