为什么 ForEach-Object 在作为 foreach 调用时表现不同?

Isz*_*szi 3 powershell

在PowerShell中,foreach并且%是默认的别名ForEach-Object。但是,该命令的行为似乎取决于它的调用方式。

特别是,除非我专门使用foreach别名,否则我很难在不从管道中提供输入的情况下让命令工作。

在此处输入图片说明

我在这里做错了什么,还是出于某种原因设计的?

Aus*_*nch 6

foreach 语句和 Foreach-Object Cmdlet不是一回事。

其中之一:

在 Foreach-Object 的情况下,一旦产生每个对象,就会执行语句体。在 foreach 语句中,在循环体开始执行之前收集所有对象。这有两个含义

还存在性能和语法差异。

$i = @(1..3) | ForEach-Object {Write-Host $_}
Run Code Online (Sandbox Code Playgroud)

在 Foreach-Object 中有效。

  • [为什么使用 foreach 与 foreach-object?](http://bsonposh.com/archives/327) - “首先,除非在管道中使用,否则了解 foreach -ne foreach-object 很重要。” (3认同)