如何将脚本块作为参数传递并执行多次?

时间:2015-06-29 02:50:14

标签: powershell scriptblock

我希望通过" 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。 那是为什么?

2 个答案:

答案 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函数(如命令)。