webentwicklung-frage-antwort-db.com.de

Zugriff auf das Array $ args in Powershell

Ich habe ein Test-Powershell-V2-Skript, das so aussieht:

    function test_args()
    {
      Write-Host "here's arg 0: $args[0]"
      Write-Host "here's arg 1: $args[1]"
    }


    test_args

Wenn ich dies von der Powershell-Eingabeaufforderung aus aufrufe, wird Folgendes auf dem Bildschirm angezeigt:

here's arg[0]: [0]

here's arg[1]: [1]

Nicht ganz das, was ich wollte. Es scheint, dass ich $ args [0] und $ args [1] in neue Variablen im Skript kopieren muss, bevor ich sie verwenden kann? Wenn ich das tue, kann ich gut darauf zugreifen.

Gibt es eine Möglichkeit, auf die indizierten $ args in meinem Code zuzugreifen? Ich habe versucht, geschweifte Klammern um sie herum zu verwenden, aber kein Glück.

Ich werde irgendwann zu benannten Parametern übergehen, aber das Skript, an dem ich arbeite (nicht dieses Demo-Skript), ist ein direkter Port einer Batch-Datei.

25
larryq

Versuchen Sie dies stattdessen:

function test_args()
{
  Write-Host "here's arg 0: $($args[0])"
  Write-Host "here's arg 1: $($args[1])"
}

test_args foo bar

Beachten Sie, dass es sich um $args Und nicht um $arg Handelt. Auch wenn Sie eine PowerShell-Variable in einer Zeichenfolge verwenden, ersetzt PowerShell nur den Wert der Variablen. Sie können einen Ausdruck wie $args[0] Nicht direkt verwenden. Sie können den Ausdruck jedoch in einer $() -Unterausdrucksgruppe in eine Zeichenfolge mit doppelten Anführungszeichen einfügen, damit PowerShell den Ausdruck auswertet und das Ergebnis in eine Zeichenfolge konvertiert.

38
Keith Hill