2015-11-13 21 views
6

Mam funkcję, która wygląda mniej więcej tak:Jak mogę przekazywać parametry w funkcji powershell?

function global:Test-Multi { 
    Param([string]$Suite) 
    & perl -S "$Suite\runall.pl" -procs:$env:NUMBER_OF_PROCESSORS 
} 

Chciałbym, aby umożliwić użytkownikowi określić więcej parametrów do testowania-Multi i przekazać je bezpośrednio do bazowego scenariusza spuścizna Perl.

Czy narzędzie powershell udostępnia mechanizm pozwalający na dodatkowe zachowania wariadyczne w tym celu?

Odpowiedz

6

Po zobaczeniu komentarza opcja 3 brzmi dokładnie tak, jak chcesz.


Masz kilka opcji:

  1. Zastosowanie $args (kredyt do hjpotter92's answer)

  2. jawnie zdefiniować dodatkowe parametry, a następnie przetworzyć je wszystkie w swojej funkcji, aby dodać je do listy perl call.

  3. Użyj pojedynczego parametru z ValueFromRemainingArguments argument, np.

    function global:Test-Multi { 
        Param(
         [string]$Suite, 
         [parameter(ValueFromRemainingArguments = $true)] 
         [string[]]$Passthrough 
         ) 
        & perl -S "$Suite\runall.pl" -procs:$env:NUMBER_OF_PROCESSORS @Passthrough 
    } 
    
+0

Nie sądzę, aby link "ValueFromRemainingArguments" trafił w odpowiednie miejsce .... –

+1

@BillyONeal dziękuję, zaktualizowany. Jest to dokument o długich znakach, więc polecane jest 'CTRL + F' dla' ValueFromRemainingArguments'. – briantist

+2

Dodano przykład kodu. Dzięki! –

1

Nie jestem pewien, co chcesz osiągnąć, ale argumenty przekazywane do funkcji są dostępne w zmiennej $args dostępnej wewnątrz funkcji.

+0

Ale $ args będzie zawierać '-Suite' i jego ustawienie, jak również. Chcę tylko przekazać argumenty, których moja funkcja nie obsługuje. –

+0

@BillyONeal Możesz filtrować tablicę '$ args' i usunąć parametr' -Suite'. – hjpotter92

+0

Oczywiście, mogę wymyślić, jak to zrobić, ale jeśli PS już miał formalny sposób, aby oświadczyć to, chciałem tego użyć. –