2011-08-29 2 views
7

나는 내가 발견 한 것 외에 다른 옵션이 없다고 확신하지만 집단적인 인터넷 두뇌를 고르고 싶었습니다.Powershell에서 스위치 매개 변수를 필수로 표시하는 방법

부울 값을 사용자 지정 함수에 전달할 때 [switch] 매개 변수를 사용하는 것이 좋습니다. 그러나 스위치 매개 변수를 필수로 표시하려는 경우가 있습니다. 이 매개 변수는 [매개 변수 (필수 = $ true)]을 통해 선택적으로 수행 할 수 있습니다. 그러나 실제로 나타나는 UI 프롬프트가 마음에 들지 않습니다. 나는 예외를 던지는 것을 선호한다.

스위치는 true 또는 false 일 수 있으며 "IsPresent"속성은 구분하지 않습니다. switch 매개 변수를 -example : $ false으로 전달하면 스위치는 $ example.IsPresent가 거짓임을으로보고합니다.

[bool]을 (를) 사용하는 데 의존했습니다. 예 :

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

다른 트릭을 가져올 수 있습니까?

+0

왜 두 개의 스위치를 가지고 있지? 'example'과'exampleOff'입니다. 그러면 IsPresent가 오류를 던지지 않을 때. – jpaugh

답변

17

어쨌든 switch 매개 변수는 항상 필수입니다. 지정하지 않으면 false 값을 얻습니다. 지정하면 (-var) 값이 true가되고 값을 지정하면 (-var:$false) 지정된 값을 얻습니다.

나는 스위치를 지정하는 것이 필수적인 상황을 정말로 생각할 수 없다. 지정하지 않으면 false입니다. 그처럼 간단합니다.

필자가 원하는 것은 param의 값을 true 또는 false로 언급하는 것입니다. 그런 경우, 당신이 언급 bool 버전이 너무 switch와 동일한 방식으로 작동하지만 내가 갈 것 인 것이다 : $example.IsPresent에 관한 또한

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

와 - 나는 그것이 깨진/직관적 아니라는 것을 알고, 스위치 변수 자체의 값과 같습니다. 즉 Switch Paramater 생성자가 정의되는 방법이며가 갖는 유일한 특성은 IsPresent이다

스위치가 존재하는지의 여부를 식별하는 부울 값 을 포함하는 새로운 SwitchParameter 객체를 생성한다.

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

+0

예외 메시지가 당신을 괴롭히는 경우, 이것이 최선의 결과입니다. –

+1

죄송합니다. 매개 변수 목록에서 "스위치"를 사용할 때 오류가 발생한다고 잘못 결론을 내 렸습니다. 나는 이것을 다시 시험해 보았고, 그것은 좋은 것처럼 보인다. manojlds의 대답은 정확하고 매우 자세합니다. –

+0

-var : $ false가 내가 찾고있는 것이 었습니다. 감사! –

관련 문제