Arrays an ein per Powershell.exe gestartetes Skript übergeben

Vor kurzem kam in einer PowerShell-Schulung eine Frage auf, die eigentlich ganz einfach zu lösen sein sollte. Wie kann einem Skript ein Array mit Namen als Argument übergeben werden?

Eigentlich ganz einfach bedeutet, dass dazu lediglich der Parameter als Array deklariert werden muss. Der Ausgangspunkt für das folgende Beispiel ist, dass ein Skript den Status von Diensten, deren Name beim Aufruf übergeben wird, per Get-Service prüfen und in eine Datei schreiben soll. Neben den Namen der Dienste soll daher auch der Pfad einer Datei übergeben werden. Die folgende Parameterdeklaration führt zu dem gewünschten Resultat:

Das Problem: Die Übergabe funktioniert auf einmal nicht mehr, wenn das Skript außerhalb der PowerShell durch den Aufruf von Powershell.exe gestartet wird. Ein

führt nun zu einer Fehlermeldung, die besagt, dass kein Positionsparameter gefunden wurde, der „AudioSrv“ als Argument akzeptiert.

Eine Lösung besteht darin (es gibt sicher noch andere), die selten verwendete Eigenschaft ValueFromRemainingArguments beim Parameter-Attribut zu verwenden:

Damit ist der folgende Aufruf möglich:

Wer genau aufgepasst hat wird festgestellt haben, dass der Dienste-Parameter fehlt. Dies ist die Voraussetzung dafür, dass es funktioniert. Ansonsten ist erneut eine Fehlermeldung die Folge (außerdem muss auf das erste (!) Komma ein Leerzeichen folgen). Wenn ein Skript über die Eingabeaufforderung oder als Verknüpfung aufgerufen wird, kann man damit natürlich leben.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden .