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
相关产品推荐
相关产品推荐

