首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Powershell中的递归-Verbose

Powershell中的递归-Verbose
EN

Stack Overflow用户
提问于 2013-12-05 06:29:33
回答 3查看 1.6K关注 0票数 7

是否有一种简单的方法可以让-Verbose切换到Powershell中的其他函数调用?

我知道我可能可以搜索$PSBoundParameters中的标志并执行一个if语句:

代码语言:javascript
复制
[CmdletBinding()]
Function Invoke-CustomCommandA {
    Write-Verbose "Invoking Custom Command A..."

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

Invoke-CustomCommandA -Verbose

但这样做似乎很麻烦而且多余.有什么想法?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-12-05 06:46:23

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

代码语言:javascript
复制
$PSDefaultParameterValues = @{"*:Verbose"=($VerbosePreference -eq 'Continue')}

然后,使用-Verbose参数调用的每个命令都将根据调用高级函数时是否使用-Verbose进行设置。

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

代码语言:javascript
复制
$verbose = [bool]$PSBoundParameters["Verbose"]
Invoke-CustomCommandB -Verbose:$verbose
票数 9
EN

Stack Overflow用户

发布于 2015-07-15 04:01:17

我开始在一些powershell模块中使用KeithHill's $PSDefaultParameterValues技术。我遇到了一些非常令人惊讶的行为,我很确定这是范围和$PSDefaultParameterValues对全局变量的影响造成的。最后,我编写了一个名为Get-CommonParameters (别名gcp)的cmdlet,并使用splat参数来实现-Verbose (和其他公共参数)的显式和简洁级联。下面是一个这样的例子:

代码语言:javascript
复制
function f1 {
    [CmdletBinding()]
    param()
    process
    {
        $cp = &(gcp)
        f2 @cp
        # ... some other code ...
        f2 @cp
    }
}
function f2 {
    [CmdletBinding()]
    param()
    process
    {
        Write-Verbose 'This gets output to the Verbose stream.'
    }
}
f1 -Verbose

cmdlet Get-CommonParameters (别名gcp)的源位于这个github存储库中。

票数 2
EN

Stack Overflow用户

发布于 2013-12-05 07:39:48

不如:

代码语言:javascript
复制
$vb = $PSBoundParameters.ContainsKey('Verbose')
Invoke-CustomCommandB -Verbose:$vb
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20393040

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档