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

Ang*_*wal 11 powershell powershell-2.0

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

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

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

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

Get-Help TestVerbose
Run Code Online (Sandbox Code Playgroud)

我收到以下错误 -

Get-Help:为命令多次定义名为'Verbose'的参数.在行: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
Run Code Online (Sandbox Code Playgroud)

知道为什么会出现这种行为吗?我想保留强制切换,并希望用户执行我的功能 -

TestVerbose -verbose

Jam*_*ran 21

您似乎正在使用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
Run Code Online (Sandbox Code Playgroud)

  • 我仍然希望能够测试-Verbose开关是否被激活.我在[这个问题]中找到了答案(http://stackoverflow.com/questions/24446680/is-it-possible-to-check-if-verbose-argument-was-given-in-powershell). (3认同)