577 Stimmen

Wie übergebe ich mehrere Parameter an eine Funktion in PowerShell?

Wenn ich eine Funktion habe, die mehr als einen String-Parameter akzeptiert, scheint der erste Parameter alle zugewiesenen Daten zu erhalten, während die übrigen Parameter als leer übergeben werden.

Ein einfaches Testskript:

Function Test([string]$arg1, [string]$arg2)
{
    Write-Host "`$arg1 Wert: $arg1"
    Write-Host "`$arg2 Wert: $arg2"
}

Test("ABC", "DEF")

Die generierte Ausgabe ist

$arg1 Wert: ABC DEF
$arg2 Wert: 

Die korrekte Ausgabe sollte sein:

$arg1 Wert: ABC
$arg2 Wert: DEF

Dies scheint auf mehreren Maschinen zwischen v1 und v2 konsistent zu sein, daher mache ich offensichtlich etwas falsch. Kann mir jemand genau zeigen, was?

8 Stimmen

Du rufst einfach so an: Test "ABC" "DEF"

2 Stimmen

Meiner bescheidenen Meinung nach zeigt die Tatsache, dass diese Frage und Antwort so viele positive Bewertungen haben, dass die aktuelle Implementierung.... nicht intuitiv ist.

5voto

Rodney Fisk Punkte 89

Ich weiß nicht, was du mit der Funktion machst, aber schau dir die Verwendung des 'param'-Schlüsselworts an. Es ist deutlich leistungsstärker für das Übergeben von Parametern an eine Funktion und macht sie benutzerfreundlicher. Hier ist ein Link zu einem überkomplizierten Artikel von Microsoft darüber. Es ist nicht so kompliziert, wie es in dem Artikel klingt.

Param Verwendung

Außerdem hier ist ein Beispiel von einer Frage auf dieser Seite:

Schau es dir an.

0 Stimmen

Vielen Dank für die Antwort. Allerdings hatte ich Probleme beim Aufrufen der Funktion. Es spielte keine Rolle, ob die Funktion mit Param oder ohne deklariert wurde.

4voto

Funktion Test([String]$arg1, [String]$arg2)
{
    Write-Host "`$arg1 Wert: $arg1"
    Write-Host "`$arg2 Wert: $arg2"
}

Test("ABC") ("DEF")

3voto

Eric Punkte 31

Ich habe zuvor folgendes angegeben:

Das häufigste Problem besteht darin, die Singularform $arg zu verwenden, was inkorrekt ist. Es sollte immer im Plural als $args sein.

Das Problem liegt nicht darin. Tatsächlich kann $arg beliebig sein. Das Problem war die Verwendung des Kommas und der Klammern.

Ich führe den folgenden Code aus, der funktioniert hat, und die Ausgabe folgt:

Code:

Funktion Test([string]$var1, [string]$var2)
{
    Write-Host "`$var1-Wert: $var1"
    Write-Host "`$var2-Wert: $var2"
}

Test "ABC" "DEF"

Ausgabe:

$var1-Wert: ABC
$var2-Wert: DEF

4 Stimmen

Vielen Dank, mein Freund, jedoch bist du ein paar Jahre zu spät :-) Die ersten drei Antworten hier hatten das Problem bereits ausreichend behandelt. Darf ich vorschlagen, dass du in den Bereich der unbeantworteten Fragen gehst und einige davon ausprobierst?

2voto

Serhii Kimlyk Punkte 89
Funktion Test {
    Param([string]$arg1, [string]$arg2)

    Write-Host $arg1
    Write-Host $arg2
}

This is a proper params declaration.

See about_Functions_Advanced_Parameters.

And it indeed works.

1voto

Kaushal Khamar Punkte 2067

Sie können Parameter auch so an eine Funktion übergeben:

function FunctionName()
{
    Param ([string]$ParamName);
    # Operationen
}

4 Stimmen

Das würde das Definieren von Parametern für eine Funktion bedeuten, die ursprüngliche Frage war, wie man Parameter spezifiziert, wenn man die Funktion aufruft.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X