如何将函数传递给PowerShell中的脚本?

时间:2014-03-29 22:19:01

标签: powershell

C:\ TMP \ run.ps1:

function buildOne()
{
    param(
        [Parameter(Mandatory=$true)][string]$a,
        [Parameter(Mandatory=$true)][string]$b
    )
    Write-Host -ForegroundColor yellow "$a $b"
}

C:\tmp\_build.ps1 {$Function:buildOne}

C:\ tmp_build.ps1:

param(
    [Parameter(Mandatory=$true)]$buildOne
)

#&$buildOne "a" "b"
#Invoke-Command $buildOne -argumentlist "a", "b"
#Invoke-Command -ScriptBlock $buildOne -argumentlist "a", "b"

我们的想法是调用从buildOnerun.ps1作为参数传递的_build.ps1函数。不幸的是,我的尝试都没有奏效。出于某种原因,它只显示函数体而不是调用它。

我做错了什么?

1 个答案:

答案 0 :(得分:2)

您可以按名称调用命令(和函数),只要它们在范围内:

C:\tmp_build.ps1 buildOne

tmp_build.ps1

& $buildOne a b 

如果你真的想传递函数定义,那就这样做:

run.ps1

function buildOne()
{
    param(
        [Parameter(Mandatory=$true)][string]$a,
        [Parameter(Mandatory=$true)][string]$b
    )
    Write-Host -ForegroundColor yellow "$a $b"
}

.\tmp_build.ps1 $Function:buildOne

tmp_build.ps1

param(
    [Parameter(Mandatory=$true)]$buildOne
)

$buildOne.Invoke("a", "b")