Différence entre ForEach et ForEach-Object in powershell
Quelle est la différence entre ForEach
et ForEach-Object
?
J'ai un petit code comme celui-ci, fonctionne très bien
$txt = Get-Content 'C:\temp$txt = Get-Content 'C:\temp\000.txt'
$result = foreach ($line in $txt) {$line.replace(".ini","")}
$result | out-file 'c:\temp\001.txt'
0.txt'
$result = foreach ($line in $txt) {$line.replace(".ini","")}
$result | out-file 'c:\temp$txt = Get-Content 'C:\temp\000.txt'
$result = foreach ($line in $txt) {$line.replace(".ini","")}
$result | out-file 'c:\temp\001.txt'
1.txt'
Mais si j'utilise "ForEach-Object", j'ai eu des erreurs....
$txt = Get-Content 'C:\temp$txt = Get-Content 'C:\temp\000.txt'
$result = foreach-object ($line in $txt) {$line.replace(".ini","")}
$result | out-file 'c:\temp\001.txt'
0.txt'
$result = foreach-object ($line in $txt) {$line.replace(".ini","")}
$result | out-file 'c:\temp$txt = Get-Content 'C:\temp\000.txt'
$result = foreach-object ($line in $txt) {$line.replace(".ini","")}
$result | out-file 'c:\temp\001.txt'
1.txt'
Pourquoi ? et comment la sortie de la boucle de résultats en utilisant ForEach-Object
source d'informationauteur Root Loop
Vous devez vous connecter pour publier un commentaire.
foreach
est un alias deForEach-Object
mais il semble aussi être un mot-clé (qui est source de confusion).La
foreach ($<item> in $<collection\>){<statement list>}
de la syntaxe que vous utilisez esthelp about_foreach
.La
foreach
commeForEach-Object
alias esthelp ForEach-Object
.Le mot-clé
foreach
fonctionne sur chaque$<item>
dans le$<collection>
comme indiqué dans le()
peu.L'alias
foreach
/fonctionForEach-Object
opère sur chaque élément de la collection, il reçoit en entrée.Ils sont différents des commandes à des fins différentes. Le ForEach-Object applet de commande est utilisé dans le pipeline, et que vous utilisez soit $PSItem $ ou_ pour se référer à l'objet en cours afin d'exécuter un {scriptblock} comme ceci:
Maintenant, vous pouvez également utiliser un très similaire à la recherche mot-cléForEach, au début d'une ligne. Dans ce cas, vous pouvez exécuter une {scriptblock} dans laquelle vous définissez le nom de la variable, comme ceci:
La principale différence ici est l'endroit où vous utilisez la commande, l'un est utilisé dans le milieu d'un pipeline, tandis que l'autre commence son propre pipeline. Dans la production de scripts de style, je vous recommande d'utiliser le mot-clé ForEach au lieu de l'applet de commande.