So definieren Sie benannte Parameter in PowerShell als [ref]

8

Ich versuche, [ref] benannte Parameter zu verwenden. Ich erhalte jedoch einen Fehler:

%Vor%

Wie kann ich dieses Problem beheben?

    
Backwards_Dave 13.04.2015, 01:28
quelle

2 Antworten

21

Ich habe festgestellt, dass Sie in Ihrem Beispiel für einen [ref] -Parameter einen "Workflow" verwenden. Der Einfachheit halber nennen wir es eine "Funktion" und kehren später zu "Workflow" zurück.

Es gibt drei Dinge, die Sie in Ihrem Code ändern müssen:

  1. Wenn Sie einen Parameter [ref] an eine Funktion übergeben, müssen Sie den Parameter in Klammern () einschließen.
  2. Wenn Sie einen Parameter [ref] innerhalb einer Funktion verwenden, beziehen Sie sich auf $ variable.value
  3. Entfernen Sie den [string] -Typ aus Ihrer Parameterdefinition. Es kann ein [string] oder [ref] sein, aber nicht beides.

Hier ist Code, der funktioniert:

%Vor%

Wie für "Workflows". Sie sind sehr eingeschränkt, lesen Sie PowerShell-Workflows: Einschränkungen . Insbesondere können Sie eine Methode für ein Objekt im Workflow nicht aufrufen. Dies wird die Linie brechen:

%Vor%

Ich denke nicht, dass die Verwendung von [ref] -Parametern in einem Workflow aufgrund von Workflow-Einschränkungen praktisch ist.

    
Jan Chrbolka 13.04.2015, 01:45
quelle
2

Ich fühlte, dass ich diese ergänzende, sehr einfache Antwort schreiben musste, da dies der erste Google-Treffer war, als ich nach Informationen über die Verwendung von Referenzparametern in Powershell-Funktionen suchte. Obwohl es sich bei Ihrer Frage nicht um Funktionen, sondern um Workflows handelte:

Beispiel mit Referenzparametern in Funktionen (funktioniert nicht mit Workflow):

%Vor%

Mit Funktionen können Sie Parameter so definieren, dass sie sowohl ein Verweis als auch ein anderer Typ sind (z. B. bei Workflows):

%Vor%

Ich stimme Jan zu, Sie sollten nicht versuchen, Referenzparameter in Arbeitsabläufen zu verwenden, weil der Workflow Beschränkungen unterliegt (Methodenaufruf auf Objekte): Ссылка

    
Jim Björklund 02.12.2016 10:30
quelle