如何将命名函数作为参数传递(scriptblock)

Geo*_*uer 3 powershell scriptblock

我们来看一下经典的一阶函数示例:

function Get-MyName { "George" }

function Say-Hi([scriptblock]$to) {
  Write-Host ("Hi "+(& $to))
}
Run Code Online (Sandbox Code Playgroud)

这很好用:

Say-Hi { "Fred Flintstone" }
Run Code Online (Sandbox Code Playgroud)

这不是:

Say-Hi Get-MyName
Run Code Online (Sandbox Code Playgroud)

因为Get-MyName被评估,而不是作为值本身传递.如何将Get-MyName作为值传递?

mjo*_*nor 6

您必须将Get-Myname作为脚本块传递,因为这是您定义变量类型的方式.

Say-Hi ${function:Get-MyName}
Run Code Online (Sandbox Code Playgroud)