You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell传含连字符参数时报‘Missing ')' in function parameter list’错误

问题根源

PowerShell里的变量名、参数变量名不能包含连字符——连字符会被当成减法运算符解析。你写的param($testName-2-1-dev)会被拆成$testName - 2 - 1 - dev,直接触发语法错误Missing ')' in function parameter list。

解决步骤

1. 正确定义带连字符的参数

如果要接收名为testName-2-1-dev的参数,得用合法的变量名(去掉连字符或换下划线),再通过[Alias()]设置别名,这样调用脚本时就能用带连字符的别名传参:

param(
    [Alias("testName-2-1-dev")]
    [string]$TestId  # 合法变量名,无特殊字符
)

调用脚本时这么写:

.\your-script.ps1 -testName-2-1-dev "你的对象ID值"

2. 正确引用带连字符的变量

如果是要引用外部传入的带连字符变量(比如环境变量),必须用大括号包裹变量名避免解析错误:

${testName-2-1-dev}  # 这才是带连字符变量的正确引用方式

3. 修复你的完整脚本

修改后的脚本示例(补充了原脚本缺失的$keyvault参数定义):

param(
    [Alias("testName-2-1-dev")]
    [string]$TestId,
    [string]$KeyVault
)

# 如果是引用外部带连字符变量,用大括号写法
# ${testName-2-1-dev}

# 用合法变量名调用az命令
$updatePermissions = az keyvault set-policy -n $KeyVault --secret-permissions get list --object-id $TestId
$updatePermissions

注意事项

  • 绝对不要在param()里定义带连字符的变量名,这是PowerShell语法不允许的
  • 如果是要拼接变量和连字符字符串(比如$testName加上-2-1-dev),直接写"$testName-2-1-dev"即可,但这和你需求的“带连字符的变量名”不是一回事,别搞混。

内容的提问来源于stack exchange,提问作者Jason

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 21:48:09