Как пометить параметр переключателя как обязательный в Powershell - PullRequest
8 голосов
/ 29 августа 2011

Я почти уверен, что у меня нет других вариантов, кроме того, что я обнаружил, но я хотел выбрать коллективный интернет-мозг.

Я предпочитаю использовать параметр [switch] при передаче логических значений в пользовательские функции. Однако у меня есть несколько случаев, когда я хотел пометить параметр switch как обязательный. Это может быть дополнительно выполнено через [параметр (обязательный = $ true)] для параметра. Тем не менее, мне очень не нравится приглашение UI, которое появляется. Я предпочитаю бросить исключение.

Но, переключатель может быть либо true, либо false, и свойство IsPresent не делает различий. Если я передаю параметр переключателя как -example: $ false , коммутатор сообщает, что $ example.IsPresent имеет значение false !

Я прибег к использованию [bool]. Например:

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

Есть ли другие хитрости, которые я могу использовать?

1 Ответ

20 голосов
/ 30 августа 2011

Таким образом, параметр switch всегда является обязательным.Если вы не укажете его, он получит значение false.Если вы укажете это значение (-var), оно получит значение true, а если вы укажете это значение (-var:$false), оно получит указанное значение.

Я не могу вспомнить ситуацию, когда этоОбязательно указывать переключатель.Если вы не укажете, это неверно.Все просто.

Я думаю, что вы хотите, чтобы конкретно упомянуть значение параметра как истинного или ложного?Если это так, то я хотел бы использовать версию bool, о которой вы упомянули, хотя она также работает и с switch:

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

И также в отношении $example.IsPresent - Iзнаю, что это не интуитивно / не работает, но оно совпадает со значением самой переменной переключателя.Таким образом определяется конструктор для Switch Paramater, и единственное свойство, которое он имеет, это IsPresent:

Создает новый объект SwitchParameter, который включает логическое значение, которое определяет, присутствует ли переключатель.

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

...