【发布时间】:2015-09-11 15:39:12
【问题描述】:
我有以下代码:
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
第一个“f”调用成功,而 %{} 块显示错误:
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
但是为什么呢? ForEach-Object 不支持 begin/process/end 块?
【问题讨论】:
-
ForEach-Object 采用参数 Begin、Process 和 End,它们都是脚本块,因此您不必编写函数 f 或包装器高级函数。 Process 参数的脚本块接受管道输入是没有意义的。使用其他参数。
标签: powershell foreach scriptblock