2014-01-25 73 views
1

我想創建一些函數名稱的數組,然後根據傳遞給我的腳本的參數調用這些數組。這可能嗎?在下面的粗略示例中,如果我將2作爲參數傳遞給腳本,我希望$twoFuncs函數列表按照的順序被稱爲在數組中調用一組函數

param ($whichFuncs) 
Function a{ Write-Host "Executing function a" } 
Function b{ Write-Host "Executing function b" } 
Function c {Write-Host "Executing function c" } 
$twoFuncs = @("a","b") 
$threeFuncs = @("c","b","a") 

if($whichFuncs -eq 2) 
{ 
    # execute functions a + b 
} 

回答

5

什麼你要找的是呼叫運營商&和一個foreach循環。

PS C:\Users\Frode> $twoFuncs | ForEach-Object { & $_ } 
Executing function a 
Executing function b 
+3

我總是建議避免Invoke-Expression。調用操作符在這裏完美工作,如果函數帶參數,Invoke-Expression將變得雜亂無章。 –

+1

我知道,這就是爲什麼我發佈我的答案後,迅速添加了呼叫運營商。 :)現在通過刪除'iex'使其更加清晰,儘管我通常喜歡展示多種方法。 –

+0

@FrodeF。 +1多種方法:) –

1

如何使用開關?

param ($whichFuncs) 
Function a{ Write-Host "Executing function a" } 
Function b{ Write-Host "Executing function b" } 
Function c {Write-Host "Executing function c" } 
switch ($whichFuncs) 
{ 
    2 {a;b} 
    3 {c;b;a} 
} 
+0

謝謝,很好,很簡單。我正在嘗試基本的工作流引擎,而我只注意到PowerShell 3+工作流程。我會對工作流程進行一些研究,看看它是否給我帶來了額外的東西。 –