有没有一种简单的方法可以使-Verbose开关“通过”到Powershell中的其他函数调用?

我知道我可以在$ PSBoundParameters中搜索该标志并执行一条if语句:

[CmdletBinding()]
Function Invoke-CustomCommandA {
    Write-Verbose "Invoking Custom Command A..."

    if ($PSBoundParameters.ContainsKey("Verbose")) {
        Invoke-CustomCommandB -Verbose
    } else {
        Invoke-CustomCommandB
    }
}

Invoke-CustomCommandA -Verbose

这样做似乎很麻烦和多余。

最佳答案

一种方法是在高级功能的顶部使用$ PSDefaultParameters:

$PSDefaultParameterValues = @{"*:Verbose"=($VerbosePreference -eq 'Continue')}

然后,使用-Verbose参数调用的每个命令都将对其进行设置,具体取决于调用高级功能时是否使用-Verbose。

如果只有几个命令,请执行以下操作:
$verbose = [bool]$PSBoundParameters["Verbose"]
Invoke-CustomCommandB -Verbose:$verbose

10-06 13:54