2012-05-10 11 views
8

Bezug nehmend this Link, ich versuche, in meinem Skript verbose-Modus einzuführen.Powershell: Definieren der Verbose-Schalter in einer Funktion

Wenn ich eine Funktion haben, die wie folgt definiert -

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

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

Get-Help TestVerbose 

ich folgende Fehlermeldung erhalten -

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

ABER, wenn ich die Funktion wie folgt [Entfernen der Parameter obligatorisches Attribut definieren ], es funktioniert gut

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

Get-Help TestVerbose 

Alle ich Warum solch ein Verhalten? Ich möchte den obligatorischen Schalter halten und den Benutzer möchte meine Funktion wie folgt ausführen -

TestVerbose -verbose

Antwort

16

Es scheint, Sie PoweShell v2 verwenden, in denen Verbose (zusammen mit debug, whatif, usw.) sind reserviert und ihre Funktionen automatisch für Sie bereitgestellt. Anstatt Ihren eigenen 'ausführlichen' Erkennungsschalter zu schreiben, ist die Funktionalität bereits vorhanden. Im Fall von "verbose" müssen Sie es nicht in der Parameterdeklaration angeben, andere Parameter wie "which" benötigen spezielle 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

Danke! Ich wusste das nicht. Ja, ich benutze V2. –

+1

Ich wollte immer noch testen können, ob der Schalter -Verbose aktiviert wurde. Ich fand meine Antwort in [dieser Frage] (http://stackoverflow.com/questions/24446680/is-it-possible-to-check-if-verbose-argument-was-given-in-powershell). –

Verwandte Themen