Ü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$users[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
PowerShell 7 fügt den -Parallel Parameter zum Cmdlet ForEach-Object hinzu. Dadurch kann die Pipeline mehrere Objekte gleichzeitig verarbeiten, was eine bessere Leistung als eine ForEach-Standardschleife bieten kann. Erwägen Sie diese Verwendung, wenn Sie PowerShell 7 verwenden. Das folgende Beispiel zeigt, wie ForEach-Object mit dem -Parallel Parameter verwendet wird.
$users | ForEach-Object -Parallel { Set-ADUser $_ -Department "Marketing" }
Hinweis
Verwenden Sie -Parallel innerhalb eines $_ Skriptblocks, um auf das aktuelle Pipelineobjekt zu verweisen – dasselbe wie in einem regulären ForEach-Object Block. Dies unterscheidet sich von einer foreach Anweisung, in der Sie die Iterationsvariable selbst benennen. Wenn Sie auf eine Variable zugreifen müssen, die außerhalb des parallelen Blocks definiert ist, stellen Sie ihr den Bereichsmodifizierer Using: voran – zum Beispiel $Using:department.
Standardmäßig verarbeitet der -Parallel Parameter jeweils fünf Elemente. Sie können diesen Grenzwert mit dem -ThrottleLimit Parameter erhöhen oder verkleinern.