Überprüfen und Verwenden der ForEach-Schleife in Windows PowerShell-Skripts
Beim Durchführen von Pipings werden die Befehle in der Pipeline auf alle Objekte angewendet. In manchen Fällen muss möglicherweise das Cmdlet ForEach-Object verwendet werden, damit die Daten in der Pipeline verarbeitet werden. Wenn Sie Daten in einem Array speichern, können Sie mit demForEach dafür sorgen, dass alle Elemente im Array verarbeitet werden.
Für das Konstrukt ForEach wird die folgende Syntax verwendet:
ForEach ($user in $users) {
Set-ADUser $user -Department "Marketing"
}
Im vorherigen Beispiel gibt es ein Array mit dem Namen $users, das AD DS-Benutzerobjekte (Active Directory Domain Services) enthält. Das ForEach-Konstrukt verarbeitet die Windows PowerShell-Befehle zwischen den geschweiften Klammern für jedes Objekt einmal. Beim Verarbeiten der Befehle enthält jedes Element aus dem Array die Variable $user. Bei der ersten Iteration enthält $user$users[0], und bei der zweiten Iteration enthält $user$user[1]. Dies wird fortgesetzt, bis alle Elemente im Array einmal verarbeitet wurden.
In einem Skript ist das Konstrukt ForEach die gängigste Methode, Elemente zu verarbeiten, die Sie in ein Array eingefügt haben. Es ist einfach zu verwenden, da Sie nicht wissen müssen, wie viele Elemente verarbeitet werden sollen.
Im vorherigen Beispiel steht nur ein Befehl zwischen den geschweiften Klammern. Sie können jedoch viele Befehle hinzufügen, die für jede Schleife verarbeitet werden. Die Einrückung der Befehle zwischen den geschweiften Klammern ist eine Konvention zur übersichtlicheren Gestaltung von Skripts. Der Einzug ist keine technische Anforderung, hat sich jedoch bewährt.
Die Variablen in der ForEach-Schleife sollten einen aufschlussreichen Namen erhalten. Meist wird die in der Schleife verwendet Variable als einzelne Instanz des Arrays angegeben. Bei einem Array mit dem Namen $users könnte die in der Schleife verwendete Variable beispielsweise $user heißen. Ihnen werden möglicherweise Beispiele für Variablen mit einem Buchstaben begegnen, der dem Anfangsbuchstaben des Arrays entspricht. Dies sollte jedoch nur in einfachem Code verwendet werden, in dem leicht zu erkennen ist, dass sie miteinander in Beziehung stehen.
Parallele Leistung
Ab PowerShell 7 gibt es für das Cmdlet ForEach-Object den Parameter -Parallel. Dadurch können in der Pipeline mehrere Objekte gleichzeitig verarbeitet werden. Bei einer gleichzeitigen Verarbeitung mehrerer Objekte ist die Leistung besser als bei einer ForEach-Standardschleife. Sie sollten dies berücksichtigen, wenn Sie PowerShell 7 verwenden. Im folgenden Beispiel wird erläutert, wie das ForEach-Object-Cmdlet mit dem Parameter -Parallel verwendet wird.
$users | ForEach-Object -Parallel { Set-ADUser $user -Department "Marketing" }
Mit dem Parameter -Parallel können standardmäßig fünf Elemente gleichzeitig verarbeitet werden. Mit dem Parameter -ThrottleLimit können Sie diesen Wert erhöhen oder verringern.