gpt4 book ai didi

powershell - 将 PowerShell 函数绑定(bind)到参数

转载 作者:行者123 更新时间:2023-12-03 01:02:56 25 4
gpt4 key购买 nike

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

我要绑定(bind)参数选项a , bc到函数 a_function b_functionc_function到变量 $firstcmd$secondcmd .因此,如果脚本由

PS C:\ script.ps1 a

函数 a正在运行。

如果脚本被调用
PS C:\ script.ps1 a b

功能 ab正在运行。

脚本开始时的参数定义如下所示:
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"
}

# here the "command option to function mapping" magic should happen

最佳答案

它可以通过 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]

当然,如果你不为任何参数提供值,它会抛出一个错误——我让你来处理这种情况。

关于powershell - 将 PowerShell 函数绑定(bind)到参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53364297/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com