param()内的参数有多个ParameterSetNames

时间:2017-06-28 14:00:04

标签: powershell

我有以下param()块,其中包含大量ParameterSetNames

这是我用来在SQL表中更新,删除或创建新行的函数。

  • Set-User#这将使用“列表”
  • Set-User user value#这将使用“DoWork”
  • Set-User user value -new#这将使用“新”
  • Set-User user -delete#这将使用“删除”

但是由于我添加了“删除”和“新”参数集,我不能再使用“DoWork”了。为什么呢?

错误(不幸的是德语):

  

Set-User:Der Parametersatz kann mit den angegebenen benannten   Parameternnichtaufgelöstwerden。在Zeile:1 Zeichen:1   + set-user用户值   + ~~~~~~~~~~~~~~~~~~~~~~~~~~~       + CategoryInfo:InvalidArgument:(:) [Set-user],ParameterBindingException       + FullyQualifiedErrorId:AmbiguousParameterSet,Set-user

function Set-User {
    [CmdLetBinding(DefaultParameterSetName = "list")]
    param(
        [Parameter(ParameterSetName = "DoWork", Mandatory = $true, Position = 0)]
        [Parameter(ParameterSetName = "New", Mandatory = $true, Position = 0)]
        [Parameter(ParameterSetName = "Delete", Mandatory = $true, Position = 0)]
        [Alias("d")]
        [string]$domain,
        [Parameter(ParameterSetName = "DoWork", Mandatory = $true, Position = 1)]
        [Parameter(ParameterSetName = "New", Mandatory = $true, Position = 1)]
        [Alias("t")]
        [ValidateSet("XMLOrder","EdiOrder","EmailOrder","Edi")]
        [string]$type,
        [Parameter(ParameterSetName = "list")]
        [Alias("l")]
        [switch]$list, 
        [Parameter(ParameterSetName = "New")]
        [switch]$new,
        [Parameter(ParameterSetName = "Delete")]
        [switch]$delete,
        [string]$connectionstring
    )
}

1 个答案:

答案 0 :(得分:2)

错误消息非常明确:PowerShell无法解析在您调用它并收到该错误的情况下使用哪个参数集(" AmbiguousParameterSet")。解决此问题的最简单方法是在每个参数集中至少创建一个参数,该参数对于该参数集是唯一的必需参数;当我写这样的函数时,我通常把它作为switch参数。因此,在这种情况下,您需要$new作为必填参数,如果您未在通话中指定-new,则可以解析通话的参数集去做。

[Parameter(Mandatory=$true,ParameterSetName="New")]
[switch]$New

顺便说一下,您不需要[Alias("...")]关于您为其定义的两个参数; PowerShell将明确的前导子字符串作为"别名"对于参数 - 所以因为只有一个参数以每个参数开始。和' l',使用-t-l进行通话会假设您分别指-type-list。如果您从-domain中省略了它,则使用-d进行调用将不明确;你可能意味着-domain-delete - 但是使用-del-dom调用它可以解决歧义,就像建立-d别名一样。