Просто проверить, установлен ли флаг -Debug, можно с помощью приведенного ниже кода, но этого недостаточно.
bool debug = false;
bool containsDebug = MyInvocation.BoundParameters.ContainsKey("Debug");
if (containsDebug)
debug = ((SwitchParameter)MyInvocation.BoundParameters["Debug"]).ToBool();
PowerShell также позволяет вам установить глобальный флаг с именем $ DebugPreference, который приведенный выше код не проверяет. И вызов командлета из другого командлета наследует эти общие параметры, которые не наследуются через флаг отладки, как проверяет код выше. Код ниже проверит $ DebugPreference и решит эти проблемы.
debug = (ActionPreference)GetVariableValue("DebugPreference") != ActionPreference.SilentlyContinue;
К сожалению в отличие от командлета в PowerShell вы должны проверить оба. Итак, окончательный код C # такой, как показано ниже. Я также добавил код для общего параметра Verbose в качестве бонуса. Обязательно наследуйте от PSCmdlet вместо Cmdlet, чтобы перейти к методу GetVariableValue.
bool debug = false;
bool containsDebug = MyInvocation.BoundParameters.ContainsKey("Debug");
if (containsDebug)
debug = ((SwitchParameter)MyInvocation.BoundParameters["Debug"]).ToBool();
else
debug = (ActionPreference)GetVariableValue("DebugPreference") != ActionPreference.SilentlyContinue;
bool verbose = false;
bool containsVerbose = MyInvocation.BoundParameters.ContainsKey("Verbose");
if (containsVerbose)
verbose = ((SwitchParameter)MyInvocation.BoundParameters["Verbose"]).ToBool();
else
verbose = (ActionPreference)GetVariableValue("VerbosePreference") != ActionPreference.SilentlyContinue;