2014-01-24 8 views
5

Ich habe eine Funktion Powershell, die im Grunde wie folgt aussieht:Kann ich Argumente an eine Powershell-Funktion übergeben? Die Unix-Methode?

function DoSomething-ToTask { 
    [cmdletbinding()] 
    param(
      [parameter(Mandatory=$true)] 
      [strehg[]]$TaskNums 
    ) 

    foreach ($TaskNum in $TaskNums) { 
     do something $TaskNum 
    } 
} 

Ziel zu können, ist in der Lage sein, um diese Funktion von der Kommandozeile von Parametern mit einer beliebigen Nummer anzurufen. Zum Beispiel kann ich es nun wie folgt nennen:

DoSomething-ToTask 1 2 3 

wie diese später ..und

DoSomething-ToTask 4 

Das zweite Beispiel funktioniert, aber die erste nicht. Ich habe da gelernt, dass ich mehrere Argumente wie diese passieren muß:

DoSomething-ToTask (1, 2, 3) 

Was nicht das Schlimmste, was in der Welt, aber immer noch eine Art Schmerz im Vergleich zu dem ersten Beispiel.

Gibt es eine Möglichkeit, eine PS-Funktion zu schreiben, die mit dem Argument "1 2 3" funktioniert?

Antwort

10

Ja, Sie können das Parameterattribut ValueFromRemainingArguments verwenden.

function DoSomething-ToTask { 
    [cmdletbinding()] 
    param(
      [Parameter(Mandatory=$true, ValueFromRemainingArguments = $true)] 
      [int[]]$TaskNums 
    ) 

    foreach ($TaskNum in $TaskNums) { 
     do something $TaskNum 
    } 
} 

Hier ist ein funktionierendes Beispiel:

function Do-Something { 
    [CmdletBinding()] 
    param (
     [Parameter(ValueFromRemainingArguments = $true)] 
     [int[]] $TaskNumber 
    ) 

    foreach ($Item in $TaskNumber) { 
     Write-Verbose -Message ('Processing item: {0}' -f $Item); 
    } 
} 

Do-Something 1 2 3 -Verbose; 

Ergebnis:

enter image description here

+1

, die den Trick tat. Vielen Dank Trevor! –

Verwandte Themen