The ForEach-Object cmdlet works much like the Foreach statement, except that you can't pipe input to a Foreach statement. For more information about the Foreach statement, see about_Foreach.
https://learn.microsoft.com/en-us/powershell/module/microsof...And another appears to be performance
PS /home/me> $time = (Measure-Command {
>> 1..1E4 | ForEach-Object {
>> $_
>> }
>> }).TotalMilliseconds
PS /home/me> [pscustomobject]@{
>> Type = 'ForEach-Object'
>> Time_ms = $Time
>> }
Type Time_ms
---- -------
ForEach-Object 144.558
PS /home/me> $Time = (Measure-Command {
>> ForEach ($i in (1..1E4)) {
>> $i
>> }
>> }).TotalMilliseconds
PS /home/me> [pscustomobject]@{
>> Type = 'ForEach_Statement'
>> Time_ms = $Time
>> }
Type Time_ms
---- -------
ForEach_Statement 17.621
https://devblogs.microsoft.com/scripting/getting-to-know-for...