2011-08-29 12 views
7

Jestem prawie pewien, że nie mam żadnych innych opcji poza tym, co odkryłem, ale chciałem wybrać zbiorowy mózg internetowy.Jak oznaczyć parametr przełącznika jako obowiązkowy w Powershell

Wolę używać parametru [przełącznik] podczas przekazywania wartości logicznych do funkcji niestandardowych. Mam jednak kilka przypadków, w których chciałem oznaczyć parametr przełącznika jako obowiązkowy. Można to opcjonalnie zrealizować za pomocą parametru [parametr (Mandatory = $ true)] dla parametru. Jednak naprawdę nie podoba mi się monit UI, który się pojawia. Wolę rzucić wyjątek.

Ale przełącznik może być prawdziwy lub fałszywy, a własność "IsPresent" nie rozróżnia. Jeśli przekazuję parametr przełącznika jako -example: $ false, przełącznik zgłasza, że ​​$ example.IsPresent jest fałszywy!

Użyłem [bool]. Na przykład:

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

Czy są jakieś inne sztuczki, które mogę przeciągnąć?

+0

Dlaczego nie posiadają dwa przełączniki? 'przykład' i' przykładOff'. Wtedy, gdy ani 'IsPresent' nie zgłosi błędu. – jpaugh

Odpowiedz

17

W pewnym sensie parametr switch jest zawsze obowiązkowy. Jeśli go nie określisz, otrzyma wartość false. Jeśli go podasz (-var), otrzyma on wartość true, a jeśli podasz także wartość (-var:$false), otrzyma określoną wartość.

Nie mogę naprawdę myśleć o sytuacji, w której obowiązkowe jest określenie przełącznika. Jeśli nie określisz, będzie to fałsz. Proste.

Myślę, że to, co chcesz, to konkretnie wymienić wartość tego parametru jako prawdziwą lub fałszywą? Jeśli tak jest, wersja bool które można wymienić to, co chciałbym pójść, ale to działa w ten sam sposób z switch też:

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

a także dotyczące $example.IsPresent - Wiem, że to nie jest intuicyjny/łamane, ale jest taka sama jak wartość samej zmiennej przełączającej. To jest jak konstruktor Switch Paramater jest zdefiniowany i jedyna właściwość, że ma to IsPresent:

Tworzy nowy obiekt SwitchParameter który zawiera wartość logiczną który identyfikuje, czy przełącznik jest obecny.

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

+0

Jeśli przeszkadza ci wyjątek, to jest to najlepsze, co dostaniesz. –

+1

Ups! Niesłusznie doszedłem do wniosku, że wyrzucenie błędu podczas używania "Przełącznika" na liście parametrów nie działa. Znowu próbowałem tego i wydaje mi się, że dobrze. Odpowiedź manojlds jest zarówno dokładna, jak i bardzo szczegółowa. –

+0

-var: $ false było tym, czego szukałem. Dzięki! –

Powiązane problemy