【发布时间】:2016-10-04 20:47:31
【问题描述】:
我制作了一个简单的 powershell 脚本,它有两个参数。如果我尝试不带参数执行脚本,它工作正常。如果我尝试使用两个参数之一执行它,它工作正常。当我尝试使用两个参数运行脚本时,出现以下错误:
Parameter set cannot be resolved using the specified named parameters.
里面还有一个关于 AmibiguousParameterSet 的花絮。
我的脚本的参数部分如下所示:
[CmdletBinding(DefaultParameterSetName="None")]
param(
[Parameter(Mandatory=$False, ParameterSetName="BuildExclude")]
[ValidateSet('proj1','proj2', 'proj3', 'proj4')]
[string[]]$BuildExclude,
[Parameter(Mandatory=$False, ParameterSetName="SkipDbRestore")]
[switch]$SkipDbRestore
)
这些用法有效:
.\RunScript.ps1 -BuildExclude proj1, proj2
.\RunScript.ps1 -SkipDbRestore
.\RunScript.ps1
由于上述原因,此用法不起作用:
.RunScript.ps1 -BuildExclude proj1, proj2 -SkipDbRestore
即使我颠倒参数的顺序也不起作用。我尝试添加参数位置,使 BuildExclude=0 和 SkipDbRestore=1 能够让它们一起工作,如果我至少保持它们的顺序。但这给了我同样的歧义错误。我错过了什么?理想情况下,我希望能够以任何顺序调用带有参数的脚本并让它做正确的事情。
【问题讨论】:
标签: powershell parameters scripting parameter-passing optional-parameters