Freigeben über


about_Parameter_Binding

Kurzbeschreibung

Die Parameterbindung ist der Prozess, den PowerShell verwendet, um zu bestimmen, welcher Parametersatz verwendet wird, und um den Parametern eines Befehls Werte (Bindung) zuzuordnen. Diese Werte können aus der Befehlszeile und der Pipeline stammen.

Lange Beschreibung

Der Parameterbindungsprozess beginnt mit dem Binden von Befehlszeilenargumenten.

  1. Benannte Parameter binden

    Findet nicht in Anführungszeichen gesetzte Token in der Kommandozeile, die mit einem Bindestrich beginnen. Wenn das Token mit einem Doppelpunkt endet, ist ein Argument erforderlich. Wenn kein Doppelpunkt vorhanden ist, sehen Sie sich den Typ des Parameters an und prüfen Sie, ob ein Argument erforderlich ist. Wenn ein Wert erforderlich ist, versuchen Sie, den Typ des Arguments in den Typ zu konvertieren, der vom Parameter benötigt wird, und falls die Konvertierung erfolgreich ist, verknüpfen Sie den Parameter.

  2. Binden von Positionsparametern

    Wenn keine nicht verwendeten Befehlszeilenargumente vorhanden sind, suchen Sie nach ungebundenen Parametern, die Positionsparameter annehmen, und versuchen Sie, sie zu binden.

Nach dem Binden von Befehlszeilenargumenten versucht PowerShell, Pipelineeingaben zu binden. Es gibt zwei Möglichkeiten, wie Werte von der Pipeline gebunden werden. Parameter, die Pipelineeingaben akzeptieren, weisen ein oder beide der folgenden Attribute auf:

  • ValueFromPipeline – Der Wert aus der Pipeline wird anhand seines Typs an den Parameter gebunden. Der Typ des Arguments muss mit dem Typ des Parameters übereinstimmen.
  • ValueFromPipelineByPropertyName – Der Wert aus der Pipeline wird an den Parameter auf der Grundlage seines Namens gebunden. Das Objekt in der Pipeline muss über eine Eigenschaft verfügen, die dem Namen des Parameters oder einem seiner Aliase entspricht. Der Typ der Eigenschaft muss mit dem Typ des Parameters übereinstimmen oder konvertierbar sein.

PowerShell versucht, Pipeline-Eingaben in der folgenden Reihenfolge zu binden:

  1. Versuchen Sie, ValueFromPipeline Parameter ohne Typkonvertierung zu binden:

    Binden Sie aus der Pipeline nach Wert mit exakter Typübereinstimmung. Wenn der Befehl über Pipeline-Eingaben verfügt und es noch ungebundene Parameter gibt, versuchen Sie, an einen Parameter zu binden, der dem Typ genau entspricht.

  2. Versuchen Sie, ValueFromPipelineByPropertyName Parameter ohne Typkonvertierung zu binden:

    Wenn keine Wertübereinstimmung gefunden wird, dann binden Sie aus der Pipeline nach Name mit exakter Übereinstimmung. Suchen Sie nach einer Eigenschaft für das Eingabeobjekt, das dem Namen des Parameters oder einem seiner Aliase entspricht. Wenn die Typen exakt übereinstimmen, binden Sie den Parameter.

  3. Wenn die Pipeline-Eingabe nicht gebunden wurde, versuchen Sie, ValueFromPipeline Parameter mit Typkonvertierung zu binden:

    Versuchen Sie, die Pipeline-Eingabe in den gewünschten Typ zu konvertieren. Wenn die Konvertierung fehlschlägt, ist der Parameter nicht gebunden.

  4. Wenn die Pipeline-Eingabe nicht gebunden wurde, versuchen Sie, ValueFromPipelineByPropertyName Parameter mit Typkonvertierung zu binden:

    Der Name der Eigenschaft muss mit dem Namen des Parameters oder einem seiner Aliase übereinstimmen. Wenn der Eingabetyp nicht übereinstimmt, versuchen Sie, die Eingabe in den übereinstimmenden Typ zu konvertieren. Wenn die Konvertierung fehlschlägt, ist der Parameter nicht gebunden.

Visualisieren der Parameterbindung

Die Fehlerbehebung bei Problemen der Parameterbindung kann schwierig sein. Sie können das Cmdlet Trace-Command verwenden, um den Parameterbindungsprozess zu visualisieren. Das folgende Beispiel zeigt, wie die Parameterbindung für eine einfache Pipeline nachverfolgt wird.

Trace-Command -PSHost -Name ParameterBinding -Expression {
    Get-Item *.txt | Remove-Item
}

Die Ausgabe zeigt jeden Schritt des Prozesses der Parameterbindung für die Befehle im Ausdruck an. Die Ausgabe kann sehr ausführlich sein, aber sie kann Ihnen helfen zu verstehen, warum ein Parameter nicht wie erwartet gebunden wird. Ein vollständiges Beispiel finden Sie in dem Artikel Parameterbindung visualisieren.