13

参考这个链接,我试图在我的脚本中引入详细模式。

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

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

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

Get-Help TestVerbose

我收到以下错误 -

Get-Help:为命令定义了多次名为“Verbose”的参数。在 line:12 char:9 + Get-Help <<<< TestVerbose + CategoryInfo : MetadataError: (:) [Get-Help], MetadataException + FullyQualifiedErrorId : ParameterNameAlreadyExistsForCommand,Microsoft.PowerShell.Commands.GetHelpCommand

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

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

Get-Help TestVerbose

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

TestVerbose -详细

4

1 回答 1

24

看来您正在使用 PoweShell v2,其中保留了 Verbose(以及调试、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
于 2012-05-10T15:05:22.120 回答