2012-05-10 10 views
8

を参照してください。thisリンク、スクリプトに冗長モードを導入しようとしています。私は次のエラーを取得Powershell:関数内にVerboseスイッチを定義する

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

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

Get-Help TestVerbose 

- - 私はこのように定義された関数がある場合

私はこのような関数を定義する場合

Get-Help : A parameter with the name 'Verbose' was defined multiple times for the command. At 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 -verbose

答えて

16

あなたがPoweShellの(などのデバッグ、WHATIF、と一緒に)冗長が確保されているv2、およびそれらの機能を使用している表示されますあなたに自動的に提供されます。独自の冗長検出スイッチを作成するのではなく、その機能が既に存在しています。冗長な場合はパラメータ宣言で指定する必要はありませんが、他のパラメータでは特別な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 
+0

ありがとうございます!これを知らなかったはい、私はV2を使用しています。 –

+1

私は、-Verboseスイッチがアクティブになっているかどうかを確認するためにテストすることができたかったのです。私は[この質問](http://stackoverflow.com/questions/24446680/is-it-possible-to-check-if-verbose-argument-was-given-in-powershell)で私の答えを見つけました。 –

関連する問題