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
