我希望通过" Write-Host mm"作为脚本块功能" f",我希望" f"将执行10次,所以我尝试了:
<p aria-hidden="true">You can't see this</p>
不幸的是,powershell给出了错误:
function f([ScriptBlock]$s)
{
1..10|$s
}
f(Write-Host mm)
感谢Jason的第一个回答,但似乎不起作用: 谢谢,但似乎这不起作用,我有PS 4.0和
At C:\Users\engineer\Documents\Untitled1.ps1:3 char:11
+ 1..10|$s
+ ~~
Expressions are only allowed as the first element of a pipeline.
+ CategoryInfo : ParserError: (:) [], ParentContainsErrorRecordException
+ FullyQualifiedErrorId : ExpressionsMustBeFirstInPipeline
How to correct my script?
执行此脚本并打印出来: 谢谢,但似乎这不起作用,我有PS 4.0和
function f([ScriptBlock]$s)
{
1..10 | & $s
}
f { Write-Host mm }
这很奇怪!脚本打印出来!我有PS4.0并运行ISE。 那是为什么?
答案 0 :(得分:1)
您尝试执行脚本块10次,但是您尝试从1到10管道数组。您应该将该数组管道传输到foreach-object
。
function f([ScriptBlock]$s)
{
1..10 | % {& $s}
# % is an alias for Foreach-Object
}
f { Write-Host mm }
答案 1 :(得分:0)
您需要使用调用运算符&amp ;.此外,脚本块用大括号括起来,所以你的例子是:
function f([ScriptBlock]$s)
{
1..10 | & $s
}
f { Write-Host mm }
请注意,您不像调用C#方法那样调用PowerShell函数 - 您不在参数周围使用括号,而是在参数之间使用空格调用PowerShell函数(如命令)。