21. March 2019

ForEach-Object

Manchmal möchte man aber nicht den Umweg über die namentliche Adressierung gehen. Dann kommt ForEach-Object ins Spiel.

Wie bei Where-Object auch, wird ein Object zu ForEach-Object gepiped. Darauf folgt eine geschweifte Klammer. Und jedes Element in diesem Objekt, wir dann mittels $_ adressiert.

So zum Beispiel folgender Code:

$AllProcesses | ForEach-Object {
   Write-Host "Das ist der Prozess:"
   $_
   Write-Host "-------------------------"
}

Oder das zweite Beispiel:

$Table = @()
($AllProcesses | ? {$_.Name -ne "svchost"}) | ForEach-Object {
   $Line = "" | Select Name,PageMB
   $Line.Name = $_.Name
   $Line.PageMB = [math]::round($_.PagedSystemMemorySize / (1024 * 1024),2)
   $Table += $Line
}

$Table

Wobei einen keiner zwingen kann nicht doch einen anderen Weg einzuschlagen, je nach Bedarf… Hier habe ich z.B. $_ der Variablen $Process zugewiesen, wodurch ich es dann doch wie vorher verarbeiten konnte.

$Table = @()
($AllProcesses | ? {$_.Name -ne "svchost"}) | ForEach-Object {
   $Process = $_
   $Line = "" | Select Name,PageMB
   $Line.Name = $Process.Name
   $Line.PageMB = [math]::round($Process.PagedSystemMemorySize / (1024 * 1024),2)
   $Table += $Line
}

$Table