Passer en revue la syntaxe de base pour énumérer des objets dans le pipeline
La ForEach-Object commande exécute l’énumération. Il a deux alias courants : ForEach et %. Comme Where-Object, ForEach-Object a une syntaxe simplifiée et une syntaxe scriptblock.
Dans la syntaxe simplifiée, vous pouvez exécuter une méthode unique ou accéder à une propriété unique des objets qui ont été redirigés vers la commande. Voici un exemple :
Get-ChildItem –Path C:\Encrypted\ -File | ForEach-Object -MemberName Encrypt
Avec cette syntaxe, vous n’incluez pas les parenthèses après le nom du membre si le membre est une méthode. Étant donné que cette syntaxe simplifiée est destinée à être courte, vous le remarquerez fréquemment sans le nom du -MemberName paramètre, et vous pouvez le remarquer avec un alias au lieu du nom de commande complet. Par exemple, les deux commandes suivantes effectuent la même action :
Get-ChildItem –Path C:\Encrypted\ -File | ForEach Encrypt
Get-ChildItem –Path C:\Encrypted\ -File | % Encrypt
Remarque
Il se peut que vous ne rencontriez pas beaucoup de scénarios nécessitant une énumération. Chaque nouveau système d’exploitation et version de PowerShell introduit de nouvelles commandes PowerShell. Les systèmes d’exploitation plus récents introduisent généralement de nouvelles commandes qui effectuent des actions qui ont précédemment requis l’énumération.
Limitations de la syntaxe simplifiée
La syntaxe simplifiée ne peut accéder qu’à une seule propriété ou méthode. Il ne peut pas effectuer de comparaisons logiques qui utilisent -and ou -or; il ne peut pas prendre de décisions ; et il ne peut pas exécuter d’autres commandes ou code. Par exemple, la commande suivante ne s’exécute pas et génère une erreur :
Get-Service | ForEach -MemberName Stop -and -MemberName Close
La syntaxe simplifiée accepte également un paramètre facultatif -ArgumentList pour passer des arguments à des méthodes qui nécessitent une entrée. Par exemple, pour fractionner une chaîne de nom de module à l'aide du caractère . :
"Microsoft.PowerShell.Core" | ForEach-Object -MemberName Split -ArgumentList "."
En utilisant la syntaxe abrégée positionnelle :
"Microsoft.PowerShell.Core" | foreach Split "."