2014-03-29 51 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

相關問題