PowerShell ForEach-Object


Esempio

Il cmdlet ForEach-Object funziona in modo simile all'istruzione foreach , ma prende il suo input dalla pipeline.

Utilizzo di base

$object | ForEach-Object {
    code_block
}

Esempio:

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

Foreach-Object ha due alias predefiniti, foreach e % (sintassi abbreviata). Il più comune è % perché foreach può essere confuso con l' istruzione foreach . Esempi:

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

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

Utilizzo avanzato

Foreach-Object si distingue dalle soluzioni foreach alternative perché è un cmdlet che significa che è progettato per utilizzare la pipeline. Per questo motivo, supporta tre scriptblock proprio come un cmdlet o una funzione avanzata:

  • Inizia : eseguito una volta prima di scorrere gli elementi che arrivano dalla pipeline. Solitamente utilizzato per creare funzioni da utilizzare nel loop, creando variabili, aprendo connessioni (database, web +) ecc.
  • Processo : eseguito una volta per elemento arrivato dalla pipeline. "Normal" foreach codeblock. Questo è il default usato negli esempi sopra quando il parametro non è specificato.
  • Fine : eseguito una volta dopo l'elaborazione di tutti gli elementi. Solitamente utilizzato per chiudere le connessioni, generare un report, ecc.

Esempio:

"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
}