PowerShell ForEach

ForEach 有多个意思。

Foreach statement

help about_Foreach
help about_ForEach-Parallel
$letterArray = "a","b","c","d"
foreach ($letter in $letterArray)
{
    Write-Host $letter
}

Foreach cmdlet

这时 foreach 是 ForEach-Object 的别名,这个 cmdlet 有一个别名 %

Get-Alias -Definition ForEach-Object

ForEach-Object 通常用于 pipeline,用于处理比较大的数据。小数据用 foreach statement 更快(数据全部读取到内存中)。

Get-Process | ForEach-Object Name

上面使用了简写语法,把 process 的属性当作 ForEach-Object 的参数使用,完整写法:

Get-Process | ForEach-Object { $_.Name }

ForEach-Object 可以使用三个脚本块,-Begin,-Process,-End

Get-ChildItem | foreach {
    $fileCount = $directoryCount = 0
}{
    if ($_.PsIsContainer) {
        $directoryCount++
    } else {
        $fileCount++
    }
}{
    "$directoryCount directories and $fileCount files"
}

Foreach method

collection 有 ForEach method

(1..10).ForEach({$_ * 2})