Überprüfen der grundlegenden Syntax zum Aufzählen von Objekten in der Pipeline
Der ForEach-Object Befehl führt enumeration aus. Es hat zwei allgemeine Aliase: ForEach und %. Wie Where-Object, ForEach-Object hat eine vereinfachte Syntax und eine Skriptblocksyntax.
In der vereinfachten Syntax können Sie eine einzelne Methode ausführen oder auf eine einzelne Eigenschaft der Objekte zugreifen, die an den Befehl weitergeleitet wurden. Ein Beispiel:
Get-ChildItem –Path C:\Encrypted\ -File | ForEach-Object -MemberName Encrypt
Bei dieser Syntax schließen Sie die Klammern nach dem Membernamen nicht ein, wenn es sich bei dem Element um eine Methode handelt. Da diese vereinfachte Syntax kurz sein soll, werden Sie sie häufig ohne den -MemberName Parameternamen bemerken, und Sie bemerken es möglicherweise mit einem Alias anstelle des vollständigen Befehlsnamens. Beispielsweise führen beide der folgenden Befehle dieselbe Aktion aus:
Get-ChildItem –Path C:\Encrypted\ -File | ForEach Encrypt
Get-ChildItem –Path C:\Encrypted\ -File | % Encrypt
Hinweis
Möglicherweise stoßen Sie nicht auf viele Szenarien, die eine Aufzählung erfordern. Jedes neue Betriebssystem und jede neue Version von PowerShell führt neue PowerShell-Befehle ein. Neuere Betriebssysteme führen in der Regel neue Befehle ein, die Aktionen ausführen, die zuvor eine Enumeration erfordern.
Einschränkungen der vereinfachten Syntax
Die vereinfachte Syntax kann nur auf eine einzelne Eigenschaft oder Methode zugreifen. Es kann keine logischen Vergleiche ausführen, die -and oder -or verwenden; es kann keine Entscheidungen treffen und es kann keine anderen Befehle oder Code ausführen. Der folgende Befehl wird beispielsweise nicht ausgeführt, und es wird ein Fehler erzeugt:
Get-Service | ForEach -MemberName Stop -and -MemberName Close
Die vereinfachte Syntax akzeptiert auch einen optionalen -ArgumentList Parameter zum Übergeben von Argumenten an Methoden, die Eingaben erfordern. Wenn Sie beispielsweise einen Modulnamen-String mit dem . Zeichen aufteilen möchten:
"Microsoft.PowerShell.Core" | ForEach-Object -MemberName Split -ArgumentList "."
Verwendung der Positionskurzschreibweise:
"Microsoft.PowerShell.Core" | foreach Split "."