salut,
d'abord +1 pour sachadee 
foreach-object est un cmdlet inspiré du language AWK qui utilise un bloc d'initialisation, un bloc de traitement et un
bloc de finalization pour mieux traiter et gérer les entrées par le pipeline, elle est donc plus orienté shell par
contre le statement foreach est plus destiné à la
programmation classique, les programmeurs qui sont rescapés d'autres languages vers PS ne se trouveront pas depaysé
en plus chaque boucle à ses propres points forts/faibles par exemple dans un statement foreach on peux utiliser la variable spécial $foreach et les libellé par contre elle n'accepte pas l'entrée du pipeline directement
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| PS C:\> 1..3 | foreach($i in $_) {$i}
Au caractère Ligne:1 : 19
+ 1..3 | foreach($i in $_) {$i}
+ ~~
Jeton inattendu «*in*» dans l’expression ou l’instruction.
Au caractère Ligne:1 : 18
+ 1..3 | foreach($i in $_) {$i}
+ ~
Parenthèse fermante «*)*» manquante dans l’expression.
Au caractère Ligne:1 : 24
+ 1..3 | foreach($i in $_) {$i}
+ ~
Jeton inattendu «*)*» dans l’expression ou l’instruction.
+ CategoryInfo : ParserError: (:) [], ParentContainsErrorRecordException
+ FullyQualifiedErrorId : UnexpectedToken
PS C:\> 1..3 | &{foreach($i in $input) {$i}}
1
2
3
PS C:\> |
par contre le cmdlet foreach-object (alias: foreach et %) est plus flexible si on utilise le pipeline:
1..3 | ForEach-Object {[int]$sum=''} {$sum+=$PSItem} {$sum} | Out-file ....
mais avec des données assez grandes ça peux être long vu qu'on utilise le pipeline d'ou l'ajout du paramètre commun OutBuffer qui peux nous aider un peu sur ce problème d'allocation de mémoire
pour plus d'aide tu peux consulter l'aide:
1 2
| get-help ForEach-Object -full
get-help about_Foreach -Category HelpFile |
Partager