Как узнать, был ли параметр whatif передан командлету клиента программно?

Я хотел бы знать, был ли параметр whatif передан в командлет.

например: remove-mycmdlet -whatif

Я попытался сделать это, найдя значение переменной: WhatIfPreference.

Но это всегда дает ложь.

Не могли бы вы сообщить мне, как я могу узнать, передан ли параметр whatif?

Большое тебе спасибо,

С уважением, Нареш


person Dreamer    schedule 16.05.2012    source источник


Ответы (1)


Когда я определяю такую ​​функцию:

function Test-WhatIf {
[CmdletBinding(SupportsShouldProcess = $true)]
param (
)

    $WhatIfPreference
    $PSBoundParameters.ContainsKey('WhatIf')
}

Я получаю $ false или $ true, в зависимости от добавления -WhatIf к команде. Хотя это всего лишь расширенная функция, я бы не ожидал другого поведения в скомпилированной команде ... Вы уверены, что правильно реализовали SupportsShouldProcess?

person BartekB    schedule 16.05.2012
comment
Большое спасибо за быстрый ответ. Это специальный командлет, который я реализовал в .NET (C #). Как это сделать программно? в основном я использовал объект PSCmdlet GetVariableValue (имя строки). Он всегда возвращал false. Кстати, есть ли в С # эквивалент для $ PSBoundParameters.ContainsKey ('WhatIf')? - person Dreamer; 16.05.2012
comment
Да, я правильно реализовал процесс поддержки, поскольку параметры подтверждения / подтверждения работают должным образом, когда пользователь их передает. Я объявил свой командлет со следующими установленными атрибутами: [Cmdlet (VerbsCommon.Remove, EmcLun, SupportsShouldProcess = true, ConfirmImpact = ConfirmImpact.High)] Мне просто нужно знать, что пользователь передал этот параметр, но не знаю, как это сделать программно в .net. - person Dreamer; 16.05.2012
comment
Хорошо, схватил VS и попытался найти то же самое в подходящих командлетах. Вы найдете мой ответ во второй ветке ... :) - person BartekB; 17.05.2012