也许这听起来很奇怪,但没有任何简单的方法让 cmdlet 知道它的详细或调试模式。看看相关的问题:
cmdlet 如何知道它何时真正应该调用 WriteVerbose()?
一个不完美但实际上合理的选项是引入您自己的 cmdlet 参数(例如,$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
反正一切都不完美。如果有更好的解决方案,那么我真的很想亲自了解它们。