foreach 对象

ForEach-Object cmdlet 与 foreach 语句的工作方式类似,但是从管道获取其输入。

基本用法

$object | ForEach-Object {
    code_block
}

例:

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

Foreach-Object 有两个默认别名,foreach%(简写语法)。最常见的是%,因为 foreach 可能与 foreach 语句混淆。例子:

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

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

高级用法

Foreach-Object 从替代 foreach 解决方案中脱颖而出,因为它是一个 cmdlet,这意味着它被设计为使用管道。因此,它支持三个脚本块,就像 cmdlet 或高级函数一样:

  • 开始 :在循环遍历从管道到达的项目之前执行一次。通常用于创建在循环中使用的函数,创建变量,打开连接(数据库,Web +)等。
  • 流程 :每个项目从管道到达执行一次。 正常的 foreach 代码块。当未指定参数时,这是上述示例中使用的默认值。
  • 结束 :处理所有项目后执行一次。通常用于关闭连接,生成报告等。

例:

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