В пользовательском командлете C# PowerShell определить, был ли указан параметр -Verbose

У меня есть пользовательский командлет C# PowerShell (наследующий от базового класса командлета), и я хочу иметь возможность определить, был ли указан параметр «-Verbose» при запуске командлета. Я понимаю, что WriteVerbose будет выводить, когда указан параметр -Verbose, но я хотел бы на самом деле сделать какой-то другой код, когда указан -Verbose (т.е. не выводить значения Console.Write, когда указан -Verbose).

Спасибо,

Джон


person John Chapman    schedule 01.10.2012    source источник


Ответы (2)


Проверьте связанные параметры командлета следующим образом:

if (this.MyInvocation.BoundParameters.ContainsKey("Verbose"))
{
}
person Keith Hill    schedule 01.10.2012
comment
MyInvocation не является членом объекта this (командлета). Класс наследуется от System.Management.Automation.Cmdlet. - person John Chapman; 02.10.2012
comment
Есть ли причина не наследовать от PSCmdlet? - person Keith Hill; 02.10.2012
comment
Вы в значительной степени должны наследоваться от PSCmdlet, чтобы получить связанные параметры. Также обратите внимание, что Verbose будет в связанных параметрах, даже если он был указан как -Verbose:false, поэтому в идеале вам также нужно проверить значение параметра. - person StephenD; 02.10.2012

После долгих поисков это работает для меня. Visual Studio 2013, командлет C# Powershell 3.0, использующий пространство имен PsCmdlet. import-module .\mytest.dll, затем mytest -verbose

blnVerbose = this.MyInvocation.Line.ToLower().Contains("-verbose");
person Bruce Gavin    schedule 11.11.2014