ForEach-Object
Effectue une opération sur chaque élément d’une collection d’objets d’entrée.
Syntaxe
ScriptBlockSet (Par défaut)
ForEach-Object
[-Process] <ScriptBlock[]>
[-InputObject <PSObject>]
[-Begin <ScriptBlock>]
[-End <ScriptBlock>]
[-RemainingScripts <ScriptBlock[]>]
[-WhatIf]
[-Confirm]
[<CommonParameters>]
PropertyAndMethodSet
ForEach-Object
[-MemberName] <String>
[-InputObject <PSObject>]
[-ArgumentList <Object[]>]
[-WhatIf]
[-Confirm]
[<CommonParameters>]
Description
L’applet de commande forEach-Object
À compter de Windows PowerShell 3.0, il existe deux façons différentes de construire une commande ForEach-Object.
de bloc de script . Vous pouvez utiliser un bloc de script pour spécifier l’opération. Dans le bloc de script, utilisez la
$_variable pour représenter l’objet actuel. Le bloc de script est la valeur du paramètre Process . Le bloc de script peut contenir n’importe quel script PowerShell.Par exemple, la commande suivante obtient la valeur de la propriété ProcessName de chaque processus sur l’ordinateur.
Get-Process | ForEach-Object {$_.ProcessName}instruction Operation. Vous pouvez également écrire une instruction d’opération, qui est beaucoup plus semblable au langage naturel. Vous pouvez utiliser l’instruction d’opération pour spécifier une valeur de propriété ou appeler une méthode. Les instructions d’opération ont été introduites dans Windows PowerShell 3.0.
Par exemple, la commande suivante obtient également la valeur de la propriété ProcessName de chaque processus sur l’ordinateur.
Get-Process | ForEach-Object ProcessNameLorsque vous utilisez le format de bloc de script, en plus d’utiliser le bloc de script qui décrit les opérations effectuées sur chaque objet d’entrée, vous pouvez fournir deux blocs de script supplémentaires. Le bloc de script Begin, qui est la valeur du paramètre Begin, s’exécute avant que cette applet de commande traite le premier objet d’entrée. Le bloc de script End, qui est la valeur du paramètre End, s’exécute après que cette applet de commande traite le dernier objet d’entrée.
Exemples
Exemple 1 : Diviser des entiers dans un tableau
30000, 56798, 12432 | ForEach-Object -Process {$_/1024}
29.296875
55.466796875
12.140625
Cette commande prend un tableau de trois entiers et divise chacun d’eux par 1024.
Exemple 2 : Obtenir la longueur de tous les fichiers d’un répertoire
Get-ChildItem $pshome | ForEach-Object -Process {if (!$_.PSIsContainer) {$_.Name; $_.Length / 1024; " " }}
Cette commande obtient les fichiers et répertoires du répertoire d’installation PowerShell $pshome et les transmet à l’applet de commande ForEach-Object.
Si l’objet n’est pas un répertoire, le bloc de script obtient le nom du fichier, divise la valeur de sa propriété Length par 1024 et ajoute un espace ( » « ) pour le séparer de l’entrée suivante.
L’applet de commande utilise la propriété PSISContainer pour déterminer si un objet est un répertoire.
Exemple 3 : Utiliser les événements système les plus récents
$Events = Get-EventLog -LogName System -Newest 1000
$events | ForEach-Object -Begin {Get-Date} -Process {Out-File -FilePath Events.txt -Append -InputObject $_.Message} -End {Get-Date}
Cette commande obtient les 1 000 événements les plus récents du journal des événements système et les stocke dans la variable $Events.
Il canalise ensuite les événements vers l’applet de commande ForEach-Object.
Le paramètre Begin affiche la date et l’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 de ce fichier.
Enfin, le paramètre End est utilisé pour afficher la date et l’heure après la fin du traitement.
Exemple 4 : Modifier la valeur d’une clé de Registre
Get-ItemProperty -Path HKCU:\Network\* | ForEach-Object {Set-ItemProperty -Path $_.PSPath -Name RemotePath -Value $_.RemotePath.ToUpper();}
Cette commande modifie la valeur de l’entrée de Registre RemotePath dans toutes les sous-clés sous la clé HKCU :\Network en texte en majuscules. Vous pouvez utiliser ce format pour modifier le formulaire ou le contenu d’une valeur d’entrée de Registre.
Chaque sous-clé de la clé réseau
La commande utilise l’applet de commande Set-ItemProperty commande, 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 une entrée de Registre.
La commande utilise la méthode
Étant donné que Set-ItemProperty la modification de la propriété de chaque clé est nécessaire, l’applet ForEach-Object de commande doit accéder à la propriété.
Exemple 5 : Utiliser la variable automatique $Null
1, 2, $null, 4 | ForEach-Object {"Hello"}
Hello
Hello
Hello
Hello
Cet exemple montre l’effet de la conversion de la $Null variable automatique à l’applet ForEach-Object de commande.
Étant donné que PowerShell traite null comme un espace réservé explicite, l’applet de commande ForEach-Object génère une valeur pour $Null, tout comme pour les autres objets que vous dirigez vers celui-ci.
Pour plus d’informations sur la variable automatique $Null, consultez about_Automatic_Variables.
Exemple 6 : Obtenir des valeurs de propriété
Get-Module -ListAvailable | ForEach-Object -MemberName Path
Get-Module -ListAvailable | Foreach Path
Ces commandes obtiennent la valeur de la propriété Path de tous les modules PowerShell installés. Ils utilisent le paramètre MemberName pour spécifier la propriété Path des modules.
La deuxième commande équivaut au premier.
Il utilise l’alias foreach
L’applet de commande
Exemple 7 : Fractionner les noms de module en noms de composants
"Microsoft.PowerShell.Core", "Microsoft.PowerShell.Host" | ForEach-Object {$_.Split(".")}
"Microsoft.PowerShell.Core", "Microsoft.PowerShell.Host" | ForEach-Object -MemberName Split -ArgumentList "."
"Microsoft.PowerShell.Core", "Microsoft.PowerShell.Host" | Foreach Split "."
Microsoft
PowerShell
Core
Microsoft
PowerShell
Host
Ces commandes divisent deux noms de modules séparés par des points en noms de composants. Les commandes appellent la méthode Split de chaînes. Les trois commandes utilisent une syntaxe différente, mais elles sont équivalentes et interchangeables.
La première commande utilise la syntaxe traditionnelle, qui inclut un bloc de script et l’opérateur $_d’objet actuel.
Il utilise la syntaxe des points pour spécifier la méthode et les parenthèses pour placer l’argument délimiteur.
La deuxième commande utilise le paramètre
La troisième commande utilise l’alias
La sortie de ces trois commandes, illustrées ci-dessous, est identique.
fractionner n’est qu’une des nombreuses méthodes utiles de chaînes.
Pour afficher toutes les propriétés et méthodes de chaînes, dirigez une chaîne vers l’applet de commande Get-Member.
Paramètres
-ArgumentList
Spécifie un tableau d’arguments à un appel de méthode.
Ce paramètre a été introduit dans Windows PowerShell 3.0.
Propriétés du paramètre
| Type: | Object[] |
| Valeur par défaut: | None |
| Prend en charge les caractères génériques: | False |
| DontShow: | False |
| Alias: | Args |
Jeux de paramètres
PropertyAndMethodSet
| Position: | Named |
| Obligatoire: | False |
| Valeur du pipeline: | False |
| Valeur du pipeline par nom de propriété: | False |
| Valeur des arguments restants: | False |
-Begin
Spécifie un bloc de script qui s’exécute avant que cette applet de commande traite les objets d’entrée.
Propriétés du paramètre
| Type: | ScriptBlock |
| Valeur par défaut: | None |
| Prend en charge les caractères génériques: | False |
| DontShow: | False |
Jeux de paramètres
ScriptBlockSet
| Position: | Named |
| Obligatoire: | False |
| Valeur du pipeline: | False |
| Valeur du pipeline par nom de propriété: | False |
| Valeur des arguments restants: | False |
-Confirm
Vous invite à confirmer avant d’exécuter l’applet de commande.
Propriétés du paramètre
| Type: | SwitchParameter |
| Valeur par défaut: | False |
| Prend en charge les caractères génériques: | False |
| DontShow: | False |
| Alias: | cf |
Jeux de paramètres
(All)
| Position: | Named |
| Obligatoire: | False |
| Valeur du pipeline: | False |
| Valeur du pipeline par nom de propriété: | False |
| Valeur des arguments restants: | False |
-End
Spécifie un bloc de script qui s’exécute après que cette applet de commande traite tous les objets d’entrée.
Propriétés du paramètre
| Type: | ScriptBlock |
| Valeur par défaut: | None |
| Prend en charge les caractères génériques: | False |
| DontShow: | False |
Jeux de paramètres
ScriptBlockSet
| Position: | Named |
| Obligatoire: | False |
| Valeur du pipeline: | False |
| Valeur du pipeline par nom de propriété: | False |
| Valeur des arguments restants: | False |
-InputObject
Spécifie les objets d’entrée.
ForEach-Object exécute l’instruction de bloc de script ou d’opération sur chaque objet d’entrée.
Entrez une variable qui contient les objets, ou tapez une commande ou une expression qui obtient les objets.
Lorsque vous utilisez le paramètre InputObject avec ForEach-Object, au lieu de passer aux ForEach-Objectrésultats de la commande piping, la valeur InputObject est traitée comme un seul objet.
Cela est vrai même si la valeur est une collection qui est le résultat d’une commande, telle que -InputObject (Get-Process).
Étant donné que InputObject ne peut pas retourner des propriétés individuelles à partir d’un tableau ou d’une collection d’objets, nous vous recommandons que si vous utilisez ForEach-Object pour effectuer des opérations sur une collection d’objets pour ces objets qui ont des valeurs spécifiques dans des propriétés définies, vous utilisez ForEach-Object dans le pipeline, comme illustré dans les exemples de cette rubrique.
Propriétés du paramètre
| Type: | PSObject |
| Valeur par défaut: | None |
| Prend en charge les caractères génériques: | False |
| DontShow: | False |
Jeux de paramètres
(All)
| Position: | Named |
| Obligatoire: | False |
| Valeur du pipeline: | True |
| Valeur du pipeline par nom de propriété: | False |
| Valeur des arguments restants: | False |
-MemberName
Spécifie la propriété à obtenir ou la méthode à appeler.
Les caractères génériques sont autorisés, mais fonctionnent uniquement si la chaîne résultante se résout en une valeur unique.
Si, par exemple, vous exécutez
Ce paramètre a été introduit dans Windows PowerShell 3.0.
Propriétés du paramètre
| Type: | String |
| Valeur par défaut: | None |
| Prend en charge les caractères génériques: | True |
| DontShow: | False |
Jeux de paramètres
PropertyAndMethodSet
| Position: | 0 |
| Obligatoire: | True |
| Valeur du pipeline: | False |
| Valeur du pipeline par nom de propriété: | False |
| Valeur des arguments restants: | False |
-Process
Spécifie l’opération effectuée sur chaque objet d’entrée. Entrez un bloc de script qui décrit l’opération.
Propriétés du paramètre
| Type: | ScriptBlock[] |
| Valeur par défaut: | None |
| Prend en charge les caractères génériques: | False |
| DontShow: | False |
Jeux de paramètres
ScriptBlockSet
| Position: | 0 |
| Obligatoire: | True |
| Valeur du pipeline: | False |
| Valeur du pipeline par nom de propriété: | False |
| Valeur des arguments restants: | False |
-RemainingScripts
Spécifie tous les blocs de script qui ne sont pas pris par le paramètre Process.
Ce paramètre a été introduit dans Windows PowerShell 3.0.
Propriétés du paramètre
| Type: | ScriptBlock[] |
| Valeur par défaut: | None |
| Prend en charge les caractères génériques: | False |
| DontShow: | False |
Jeux de paramètres
ScriptBlockSet
| Position: | Named |
| Obligatoire: | False |
| Valeur du pipeline: | False |
| Valeur du pipeline par nom de propriété: | False |
| Valeur des arguments restants: | False |
-WhatIf
Affiche ce qui se passerait si l’applet de commande s’exécute. L’applet de commande ne s’exécute pas.
Propriétés du paramètre
| Type: | SwitchParameter |
| Valeur par défaut: | False |
| Prend en charge les caractères génériques: | False |
| DontShow: | False |
| Alias: | Wi |
Jeux de paramètres
(All)
| Position: | Named |
| Obligatoire: | False |
| Valeur du pipeline: | False |
| Valeur du pipeline par nom de propriété: | False |
| Valeur des arguments restants: | False |
CommonParameters
Cette applet de commande prend en charge les paramètres courants : -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutBuffer, -OutVariable, -PipelineVariable, -ProgressAction, -Verbose, -WarningAction et -WarningVariable. Pour plus d’informations, consultez about_CommonParameters.
Entrées
PSObject
Vous pouvez diriger n’importe quel objet vers cette applet de commande.
Sorties
PSObject
Cette applet de commande retourne des objets déterminés par l’entrée.
Notes
- L’applet de commande
ForEach-Objectfonctionne comme l’instruction Foreach, sauf que vous ne pouvez pas diriger l’entrée vers une instruction Foreach. Pour plus d’informations sur l’instruction Foreach, consultez about_Foreach. - À compter de PowerShell 4.0,
WherelesForEachméthodes ont été ajoutées pour une utilisation avec des collections. - Vous pouvez en savoir plus sur ces nouvelles méthodes ici about_arrays