I've got the following code:
function f()
{
begin{$count=0}
process{$count+=10}
end{$count}
}
1..10|f # OK
1..10|%{
begin{$count=0}
process{$count+=10}
end{$count}
} # Error
The first "f" call succeeds, while the %{} block shows error:
100
% : The script block cannot be invoked because it contains more than one clause. The Invoke() method can only be used on script blocks that contain a single clause.
At D:\Untitled1.ps1:13 char:7
+ 1..10|%{
+ ~~
+ CategoryInfo : InvalidOperation: (:) [ForEach-Object], PSInvalidOperationException
+ FullyQualifiedErrorId : InvalidOperation,Microsoft.PowerShell.Commands.ForEachObjectCommand
But why? ForEach-Object
doesn't support begin
/process
/end
blocks?
ForEach-Object
takes the individual blocks as separate named parameters.In your case, that would be:
This is well documented in the help files - from
Get-Help ForEach-Object -Parameter *
: