递归-Verbose在Powershell中

时间:2013-12-05 06:29:33

标签: powershell

是否有一种简单的方法可以让-Verbose开关“直通”到Powershell中的其他函数调用?

我知道我可以搜索$ PSBoundParameters for the flag并执行if语句:

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

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

Invoke-CustomCommandA -Verbose

这样做似乎相当混乱和多余但是......思考?

2 个答案:

答案 0 :(得分:7)

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

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

然后,使用-Verbose参数调用的每个命令都会根据您在调用高级函数时是否使用-Verbose来设置它。

如果您只有几个命令,请执行以下操作:

$verbose = [bool]$PSBoundParameters["Verbose"]
Invoke-CustomCommandB -Verbose:$verbose

答案 1 :(得分:1)

怎么样:

$vb = $PSBoundParameters.ContainsKey('Verbose')
Invoke-CustomCommandB -Verbose:$vb