PowerShell ForEach-Object

exemplu

ForEach-Object cmdlet funcționează similar cuforeach declarație, dar ia de intrare de la conducta.

utilizare de bază

$object | ForEach-Object { code_block}

exemplu:

$names = @("Any","Bob","Celine","David")$names | ForEach-Object { "Hi, my name is $_!"}

Foreach-Object are două pseudonime implicite, foreach și % (sintaxă prescurtare). Cel mai frecvent este % deoarece foreach poate fi confundat cu declarația foreach. Exemple:

$names | % { "Hi, my name is $_!"} $names | foreach { "Hi, my name is $_!"} 

utilizare avansată

Foreach-Object se distinge de soluțiile alternativeforeach deoarece este un cmdlet ceea ce înseamnă că este proiectat să utilizeze conducta. Din acest motiv, are suport pentru trei scriptblocks la fel ca un cmdlet sau o funcție avansată:

  • Begin: executat o dată înainte de a trece prin elementele care sosesc din conductă. Folosit de obicei pentru a crea funcții pentru utilizare în buclă, crearea de variabile, deschiderea conexiunilor (bază de date, web +) etc.
  • proces: executat o dată pe element a sosit din conducta. „Normal” pentru fiecare codeblock. Aceasta este valoarea implicită utilizată în exemplele de mai sus atunci când parametrul nu este specificat.
  • End: executat o dată după procesarea tuturor elementelor. De obicei folosit pentru a închide conexiunile, pentru a genera un raport etc.

exemplu:

"Any","Bob","Celine","David" | ForEach-Object -Begin { $results = @()} -Process { #Create and store message $results += "Hi, my name is $_!"} -End { #Count messages and output Write-Host "Total messages: $($results.Count)" $results}