Powershell:在函数中定义详细开关

时间:2012-05-10 14:33:16

标签: powershell powershell-v2.0

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

当我有一个像这样定义的函数 -

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

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

Get-Help TestVerbose

我收到以下错误 -

  

Get-Help:名为'详细'的参数被定义为多个   命令的次数。在行: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 -verbose

1 个答案:

答案 0 :(得分:18)

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

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