具有多个scriptblock参数的Powershell函数

BC.*_*BC. 4 powershell scriptblock

我无法创建一个接受多个scriptblock参数的Powershell函数.这是简化的测试脚本.多个scriptblocks有什么问题?

function Task1 {
    param([scriptblock]$f={})

    $f.Invoke()
}

function Task2 {
    param([scriptblock]$f={}, [scriptblock]$k={})

    $f.Invoke()
    $k.Invoke()
}

Task1({write-host "hello" -nonewline })
Task1({write-host " world" })
Task2({write-host "hello" -nonewline }, { write-host " world" })
Run Code Online (Sandbox Code Playgroud)

这会产生以下输出:

hello world
Task3 : Cannot process argument transformation on parameter 'f'. Cannot convert the "System.Object[]" value of type "S
ystem.Object[]" to type "System.Management.Automation.ScriptBlock".
Run Code Online (Sandbox Code Playgroud)

Mik*_*ard 10

你的问题是你在调用函数时使用括号和逗号,这是PowerShell中常见的错误.

这些应该工作:

Task1 {write-host "hello" -nonewline } 
Task1 {write-host " world" }
Task2 {write-host "hello" -nonewline }  { write-host " world" }
Run Code Online (Sandbox Code Playgroud)