Возможно, это звучит странно, но у командлета нет простого способа узнать его подробный режим или режим отладки.Посмотрите на соответствующий вопрос:
Как командлет узнает, когда он действительно должен вызывать WriteVerbose ()?
Один не идеальный, но практически разумный вариант - ввестиваши собственные параметры командлета (например, $MyVerbose
, $MyDebug
) и используйте их в коде явно.
function DoStuff {
[CmdletBinding()]
param
(
# unfortunately, we cannot use Verbose name with CmdletBinding
[switch]$MyVerbose
)
process {
if ($MyVerbose) {
# do verbose stuff
}
# pass $MyVerbose in the cmdlet explicitly
New-Item Test -Type Directory -Verbose:$MyVerbose
}
}
DoStuff -MyVerbose
ОБНОВЛЕНИЕ
Когда нам нужен только переключатель(не, скажем, значение уровня многословия), тогда подход с $PSBoundParameters
, возможно, лучше, чем предложенные выше дополнительные параметры:
function DoStuff {
[CmdletBinding()]
param()
process {
if ($PSBoundParameters['Verbose']) {
# do verbose stuff
}
New-Item Test -Type Directory -Verbose:($PSBoundParameters['Verbose'] -eq $true)
}
}
DoStuff -Verbose
В любом случае, все не идеально.Если есть лучшие решения, я бы очень хотел их узнать сам.