PowerShell如何通过变量动态调用指定格式函数,无需编写多If判断
PowerShell 动态调用指定规则命名函数的实现方案
你可以通过PowerShell内置的 & 调用运算符实现需求,无需编写大量分支判断,核心逻辑是先拼接出完整的目标函数名,再通过运算符执行。
完整实现代码
function Invoke-Script { param ( [Parameter(Mandatory = $true)] [string]$Script, # 透传所有额外参数给目标函数 [Parameter(ValueFromRemainingArguments = $true)] $PassedArgs ) # 拼接完整目标函数名 $targetFunc = "Invoke-$Script" # 校验目标函数是否存在,避免报错 if (-not (Get-Command -Name $targetFunc -CommandType Function -ErrorAction SilentlyContinue)) { throw "未找到对应函数:$targetFunc,请检查传入的Script参数是否正确" } # 调用目标函数,传入所有透传参数 & $targetFunc @PassedArgs }
功能说明
- 动态调用逻辑:
&是PowerShell的调用运算符,支持传入字符串格式的函数/命令名执行,会自动解析变量值,不会当成字面量处理。 - 错误校验:提前判断目标函数是否存在,返回友好的错误提示,避免原生的命令不存在报错。
- 参数透传:如果你定义的
Invoke-Txxxx类函数本身需要传入参数,额外传入的参数会自动透传给目标函数,使用示例如下:# 等价于执行 Invoke-T1234 -Target 192.168.1.1 -Port 443 Invoke-Script -Script T1234 -Target 192.168.1.1 -Port 443
内容的提问来源于stack exchange,提问作者Ryvik
相关产品推荐
相关产品推荐

