2014-03-29 45 views
1

C:\ TMP \ run.ps1:如何在PowerShell中将函数传递给脚本?

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" 

的想法是调用buildOne功能参数传递从run.ps1_build.ps1。不幸的是,我的尝试都没有奏效。出于某种原因,它只显示函数体而不是调用它。

我在做什么错?

回答

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") 
+0

所以答案是不可能的? – mark

+0

不,请参阅最新的答案。 –

+0

这样好多了。谢谢。 – mark

相关问题