【问题标题】:Can pass powershell script one of two arguments, but not both arguments at the same time可以传递两个参数之一的powershell脚本,但不能同时传递两个参数
【发布时间】: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


    【解决方案1】:

    参数集很像重载函数——您可以使用它们来指示您需要哪些参数。您的原始示例有两个参数集,每个参数集都有一个参数。这迫使用户选择其中之一。在另一种情况下,您可能有一个函数,它要么采用 param param1,要么采用 param2 AND param3。你可以这样表达:

    function Doit
    {
        Param(
            [Parameter(Mandatory=$true, ParameterSetName="paramset1")]
            $param1,
            [Parameter(Mandatory=$true, ParameterSetName="paramset2")]
            $param2,
            [Parameter(Mandatory=$true, ParameterSetName="paramset2")]
            $param3
        )
    
        #code
    }
    

    参数集与强制真/假相结合,可以极大地控制参数如何传递到您的函数中。

    在您的示例中,您根本不需要指定参数集,因为您只有一个。所以你的函数的参数头可以这样指定:

    function doit2
    {
        param(
        [ValidateSet('proj1','proj2', 'proj3', 'proj4')]
        [string[]]$BuildExclude,
        [switch]$SkipDbRestore
        )
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-06
      相关资源
      最近更新 更多