2014-01-25 43 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+工作流程。我会对工作流程进行一些研究,看看它是否给我带来了额外的东西。 –