Exécute une opération en fonction de chacun des jeux d'objets d'entrée.

Syntaxe

ForEach-Object [-Process] <ScriptBlock[]> [-Begin <scriptblock>] [-End <scriptblock>] [-InputObject <psobject>] [<CommonParameters>]

Description

L'applet de commande ForEach-Object exécute une opération sur chaque objet d'un ensemble d'objets d'entrée. Les objets d'entrée peuvent être dirigés vers l'applet de commande ou spécifiés à l'aide du paramètre InputObject.

L'opération à exécuter est décrite dans un bloc de script qui est fourni à l'applet de commande en tant que valeur du paramètre Process. Le bloc de script peut contenir n'importe quel script Windows PowerShell.

Dans le bloc de script, l'objet d'entrée actif est représenté par la variable $_.

En plus du bloc de script qui décrit les opérations à exécuter sur chaque objet d'entrée, vous pouvez fournir deux blocs de script supplémentaires. L'un, spécifié en tant que valeur du paramètre Begin, s'exécute avant le traitement du premier objet d'entrée. L'autre, spécifié en tant que valeur du paramètre End, s'exécute après le traitement du dernier objet d'entrée.

Les résultats de l'évaluation de tous les blocs de script, y compris ceux spécifiés avec Begin et End, sont passés à travers le pipeline.

Paramètres

-Begin <scriptblock>

Spécifie un bloc de script à exécuter avant de traiter tout objet d'entrée.

Obligatoire ?

false

Position ?

named

Valeur par défaut

Accepter l'entrée de pipeline ?

false

Accepter les caractères génériques ?

false

-End <scriptblock>

Spécifie un bloc de script à exécuter après le traitement de tous les objets d'entrée.

Obligatoire ?

false

Position ?

named

Valeur par défaut

Accepter l'entrée de pipeline ?

false

Accepter les caractères génériques ?

false

-InputObject <psobject>

Accepte un objet que le bloc de script spécifié dans le paramètre Process affectera. Entrez une variable contenant les objets, ou tapez une commande ou une expression permettant d'obtenir ces objets.

Obligatoire ?

false

Position ?

named

Valeur par défaut

Accepter l'entrée de pipeline ?

true (ByValue)

Accepter les caractères génériques ?

false

-Process <ScriptBlock[]>

Spécifie le bloc de script qui est appliqué à chaque objet entrant.

Obligatoire ?

true

Position ?

1

Valeur par défaut

Accepter l'entrée de pipeline ?

false

Accepter les caractères génériques ?

false

<CommonParameters>

Cette applet de commande prend en charge les paramètres courants : -Verbose, -Debug, -ErrorAction, -ErrorVariable, -OutBuffer et -OutVariable. Pour plus d'informations, consultez about_Commonparameters.

Entrées et sorties

Le type d'entrée est le type des objets que vous pouvez diriger vers l'applet de commande. Le type de retour est le type des objets que l'applet de commande retourne.

Entrées

System.Management.Automation.PSObject

Vous pouvez diriger n'importe quel objet vers ForEach-Object.

Sorties

System.Management.Automation.PSObject

Les objets retournés par ForEach-Object sont déterminées par l'entrée.

Exemple 1

C:\PS>30000,56798,12432 | foreach-object -process {$_/1024}

Description
-----------
Cette commande accepte un tableau d'entiers, divise chacun d'eux par 1 024 et affiche les résultats.






Exemple 2

C:\PS>get-childitem C:\ | foreach-object -process { $_.length / 1024 }

Description
-----------
Cette commande récupère les fichiers et répertoires situés à la racine du lecteur C:, et retourne et affiche la taille de chacun d'eux. Les zéros représentent les répertoires dans lesquels aucune taille de fichier n'était disponible.






Exemple 3

C:\PS>$events = get-eventlog -logname system -newest 1000

C:\PS> $events | foreach-object -begin {get-date} -process {out-file -filepath events.txt -append -inputobject $_.message} -end {get-date}

Description
-----------
Cette commande récupère les 1 000 événements les plus récents du journal système et les stocke dans la variable $events. Elle dirige ensuite les événements vers l'applet de commande ForEach-Object. Le paramètre Begin affiche les date et heure actuelles. Ensuite, le paramètre Process utilise l'applet de commande Out-File pour créer un fichier texte nommé events.txt et stocke la propriété de message de chacun des événements dans ce fichier. Enfin, le paramètre End est utilisé pour afficher la date et l'heure une fois tout le traitement terminé.






Exemple 4

C:\PS>get-itemproperty -path hkcu:\Network\* | foreach-object {set-itemproperty -path $_.pspath -name RemotePath -value $_.RemotePath.ToUpper();}

Description
-----------
Cette commande met en majuscules la valeur de l'entrée de Registre RemotePath dans toutes les sous-clés de la clé HKCU:\Network. Vous pouvez utiliser ce format pour modifier la forme ou le contenu d'une valeur d'entrée du Registre.

Chaque sous-clé de la clé Network représente un lecteur réseau mappé qui se reconnectera à l'ouverture de session. L'entrée RemotePath contient le chemin UNC du lecteur connecté. Par exemple, si vous mappez le lecteur E: à \\Server\Share, il y aura une sous-clé E de HKCU:\Network et la valeur de l'entrée de Registre RemotePath dans la sous-clé E sera \\Server\Share.

Cette commande utilise l'applet de commande Get-ItemProperty pour obtenir toutes les sous-clés de la clé Network, et l'applet de commande Set-ItemProperty pour modifier la valeur de l'entrée de Registre RemotePath dans chaque clé. Dans la commande Set-ItemProperty, le chemin d'accès est la valeur de la propriété PSPath de la clé de Registre. (Il s'agit d'une propriété de l'objet Microsoft .NET Framework qui représente la clé de Registre, et non d'une entrée du Registre.) Cette commande utilise la méthode ToUpper() de la valeur RemotePath qui est une chaîne (REG_SZ).

Parce que Set-ItemProperty modifie la propriété de chaque clé, l'applet de commande ForEach-Object est nécessaire pour accéder à la propriété.









Table des matières