【问题标题】:Powershell: Defining the Verbose switch in a functionPowershell:在函数中定义详细开关
【发布时间】:2012-05-10 14:33:16
【问题描述】:

参考this 链接,我正在尝试在我的脚本中引入详细模式。

当我有这样定义的函数时 -

function TestVerbose
{
    param(
        [switch]$verbose,
        [Parameter(Mandatory = $True)] 
        $p1
    )

    if($verbose)
    {
     Write-Verbose "Verbose Mode"
    }
}

Get-Help TestVerbose

我收到以下错误 -

Get-Help : 一个名为“Verbose”的参数被定义了多个 命令的次数。在行:12 字符:9 + 获取帮助

但是,如果我这样定义函数[删除参数强制属性],它工作正常

function TestVerbose
{
    param(
        [switch]$verbose,
        $p1
    )
    if($verbose)
    {
     Write-Verbose "Verbose Mode"
    }    
}

Get-Help TestVerbose

知道为什么会有这样的行为吗?我想保留强制开关并希望用户像这样执行我的功能-

TestVerbose -verbose

【问题讨论】:

    标签: powershell powershell-2.0


    【解决方案1】:

    您似乎正在使用 PoweShell v2,其中保留了 Verbose(以及 debug、whatif 等),并自动为您提供了它们的功能。该功能已经存在,而不是编写您自己的“详细”检测开关。在详细的情况下,您不必在参数声明中指定它,其他参数如 whatif 需要特殊的语法。

    C:\Users\james> function testverbose{
    >>     param(
    >>         [Parameter(Mandatory = $True)]
    >>         $bar
    >>     )
    >>
    >>     Write-Verbose "VERBOSE!"
    >>     $bar
    >> }
    >>
    C:\Users\james> testverbose -bar "woot"
    woot
    C:\Users\james> testverbose -bar "woot" -Verbose
    VERBOSE: VERBOSE!
    woot
    

    【讨论】:

    • 谢谢!不知道这个。是的,我正在使用 V2。
    • 我仍然希望能够测试一下 -Verbose 开关是否被激活。我在this question找到了我的答案。
    猜你喜欢
    • 2020-08-14
    • 1970-01-01
    • 1970-01-01
    • 2018-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-28
    • 1970-01-01
    相关资源
    最近更新 更多