在 PowerShell 脚本中将变量与名称中的连字符一起传递时出现错误:“函数参数列表中缺少')'

Getting error: "Missing ')' in function parameter list." while passing variable in param with hyphen in name in powershell script

提问人:Jason 提问时间:6/8/2023 最后编辑:Jason 更新时间:6/8/2023 访问量:336

问:

我有一个 Powershell 脚本,我要向其传递参数。一个变量的名称中有一个连字符(变量名称格式:testName-2-1-dev)。但是我在执行它时收到以下错误:

Missing ')' in function parameter list.

脚本:

param($testName-2-1-dev)

$'testName-2-1-dev'   #.....2

$updatePermissions = az keyvault set-policy -n $keyvault  --secret-permissions get list --object-id $testName`-2`-1`-dev
$updatePermissions

我试图添加与 2 中相同的引号,并尝试在连字符之前添加 ' 字符,但没有成功。我能得到这方面的帮助吗?

PowerShell 参数传递

评论

2赞 Santiago Squarzon 6/8/2023
参数名称不应有连字符,因为它们会中断解析。不要使用连字符
0赞 Jason 6/8/2023
@SantiagoSquarzon:很遗憾,我不能改名。
1赞 Santiago Squarzon 6/8/2023
你不能的原因是什么?参数按名称、位置或管道绑定,但在大多数情况下,它们的名称实际上并不重要,重要的是它们的值

答:

2赞 Mathias R. Jessen 6/8/2023 #1

您需要使用大括号 () 来限定参数/变量名称:${...}

param(${testName-2-1-dev})

az keyvault set-policy -n $keyvault --secret-permissions get list --object-id ${testName-2-1-dev}

现在,您可以使用以下命令调用它:

.\script.ps1 -testName-2-1-dev 123

评论

0赞 Jason 6/9/2023
这奏效了。多谢。