2012-05-10 14 views
8

Łącze kierujące this, próbuję wprowadzić tryb verbose w moim skrypcie.Powershell: Definiowanie przełącznika Verbose w funkcji

Kiedy mam funkcję zdefiniowaną tak -

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

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

Get-Help TestVerbose 

pojawia się następujący błąd -

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

ALE gdybym zdefiniować funkcję takiego [usuwając obowiązkowy atrybut parametru ], działa poprawnie

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

Get-Help TestVerbose 

Dowolny dea dlaczego takie zachowanie? Chcę utrzymać obowiązkową przełącznik i chcemy użytkownikowi wykonywać moją funkcję tak -

TestVerbose -verbose

Odpowiedz

16

Wydaje używasz PoweShell v2, w którym gadatliwy (wraz z Debug whatIf, etc) są zarezerwowane i ich funkcje automatycznie dostarczone dla ciebie. Zamiast pisać swój własny "pełny" przełącznik wykrywania, funkcjonalność już istnieje. W przypadku verbose nie musisz podawać go w deklaracji parametru, inne parametry podoba mi się whatif wymagają specjalnego 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

Dzięki! Nie wiedziałem tego. Tak, używam V2. –

+1

Nadal chciałem móc przetestować, czy włączono przełącznik -Verbose. Znalazłem odpowiedź w [to pytanie] (http://stackoverflow.com/questions/24446680/is-it-possible-to-check-if-verbose-argument-was-given-in-powershell). –

Powiązane problemy