将PowerShell函数绑定到参数

时间:2018-11-18 18:43:38

标签: powershell

在PowerShell中(或者在PowerShell Core中甚至更好)是否可以将函数绑定到为脚本指定的参数ValidateSet?

我想将参数选项abc绑定到函数a_function b_functionc_function到变量{ {1}}或$firstcmd。因此,如果脚本是由

调用的
$secondcmd

函数PS C:\ script.ps1 a 运行。

如果脚本是由

调用的
a

功能PS C:\ script.ps1 a b a运行。

脚本启动时的参数定义如下:

b

1 个答案:

答案 0 :(得分:3)

可以通过使用Switch语句调用特定函数来解决该问题,但是我认为您正在寻找的是更优雅的查找。一个可能的选项是哈希表+调用运算符(&):

param([Parameter(Mandatory=$false)][String][ValidateSet('a',
                                                        'b',
                                                        'c')] $firstcmd,
      [Parameter(Mandatory=$false)][String][ValidateSet('a',
                                                        'b', 
                                                        'c')] $secondcmd
     )

function a_function {
    Write-Host "Hello a"
}

function b_function  {
    Write-Host "Hello b"
}

function c_function  {
    Write-Host "Hello c"
}

#hash table:
$ParamToFunction = @{
    a = "a_function"
    b = "b_function"
    c = "c_function"
}

#function calls:
& $ParamToFunction[$firstcmd]
& $ParamToFunction[$secondcmd]

如果您不为任何参数提供值,当然会引发错误-我将留给您处理此类情况。