【问题标题】:Trouble with multiple parameter sets多个参数集的问题
【发布时间】:2019-08-03 07:08:36
【问题描述】:

我需要为我正在创建的函数获取三个参数。参数一必须在所有参数集中。其他两个参数有多种排列。

我尝试使用参数集并搜索了其他线程,但似乎没有一个人在讨论这种情况。

我的问题是如何创建参数集,以便只有以下可能性。

Test-ParametersNow -ParamZ <string> -ParamA <string> -Param1 <string>
Test-ParametersNow -ParamZ <string> -ParamA <string> -Param2 <string>
Test-ParametersNow -ParamZ <string> -ParamA <string> -Param3
Test-ParametersNow -ParamZ <string> -ParamA <string> -Param4
Test-ParametersNow -ParamZ <string> -ParamA <string> -Param5
Test-ParametersNow -ParamZ <string> -ParamB -Param1 <string>
Test-ParametersNow -ParamZ <string> -ParamB -Param2 <string>
Test-ParametersNow -ParamZ <string> -ParamB -Param3
Test-ParametersNow -ParamZ <string> -ParamB -Param4
Test-ParametersNow -ParamZ <string> -ParamB -Param5
Test-ParametersNow -ParamZ <string> -ParamC <string> -Param1 <string>
Test-ParametersNow -ParamZ <string> -ParamC <string> -Param2 <string>
Test-ParametersNow -ParamZ <string> -ParamC <string> -Param3
Test-ParametersNow -ParamZ <string> -ParamC <string> -Param4
Test-ParametersNow -ParamZ <string> -ParamC <string> -Param5

这是我的功能。

function Test-ParametersNow{
[CmdletBinding()]
    param (
        [parameter(Mandatory=$true,Position = 0)][string]$ParamZ,


        [Parameter(ParameterSetName="Param1", Mandatory=$false)]
        [Parameter(ParameterSetName="Param2", Mandatory=$false)]
        [Parameter(ParameterSetName="Param3", Mandatory=$false)]
        [Parameter(ParameterSetName="Param4", Mandatory=$false)]
        [Parameter(ParameterSetName="Param5", Mandatory=$false)]
        [Parameter(ParameterSetName="ParamA", Mandatory=$true,Position = 1)][ValidateNotNullOrEmpty()][string]$ParamA,

        [Parameter(ParameterSetName="Param1", Mandatory=$false)]
        [Parameter(ParameterSetName="Param2", Mandatory=$false)]
        [Parameter(ParameterSetName="Param3", Mandatory=$false)]
        [Parameter(ParameterSetName="Param4", Mandatory=$false)]
        [Parameter(ParameterSetName="Param5", Mandatory=$false)]
        [Parameter(ParameterSetName="ParamB", Mandatory=$true,Position = 1)][switch]$ParamB,

        [Parameter(ParameterSetName="Param1", Mandatory=$false)]
        [Parameter(ParameterSetName="Param2", Mandatory=$false)]
        [Parameter(ParameterSetName="Param3", Mandatory=$false)]
        [Parameter(ParameterSetName="Param4", Mandatory=$false)]
        [Parameter(ParameterSetName="Param5", Mandatory=$false)]
        [Parameter(ParameterSetName="ParamC", Mandatory=$true,Position = 1)][ValidateNotNullOrEmpty()][string]$ParamC,

        [Parameter(ParameterSetName="ParamA", Mandatory=$false)]
        [Parameter(ParameterSetName="ParamB", Mandatory=$false)]
        [Parameter(ParameterSetName="ParamC", Mandatory=$false)]
        [Parameter(ParameterSetName="Param1", Mandatory=$true,Position = 2)][ValidateNotNullOrEmpty()][string]$Param1,

        [Parameter(ParameterSetName="ParamA", Mandatory=$true)]
        [Parameter(ParameterSetName="ParamB", Mandatory=$true)]
        [Parameter(ParameterSetName="ParamC", Mandatory=$true)]
        [Parameter(ParameterSetName="Param2", Mandatory=$true,Position = 2)][ValidateNotNullOrEmpty()][string]$Param2,

        [Parameter(ParameterSetName="ParamA", Mandatory=$true)]
        [Parameter(ParameterSetName="ParamB", Mandatory=$true)]
        [Parameter(ParameterSetName="ParamC", Mandatory=$true)]
        [Parameter(ParameterSetName="Param3", Mandatory=$true,Position = 2)][switch]$Param3,

        [Parameter(ParameterSetName="ParamA", Mandatory=$true)]
        [Parameter(ParameterSetName="ParamB", Mandatory=$true)]
        [Parameter(ParameterSetName="ParamC", Mandatory=$true)]
        [Parameter(ParameterSetName="Param4", Mandatory=$true,Position = 2)][switch]$Param4,

        [Parameter(ParameterSetName="ParamA", Mandatory=$true)]
        [Parameter(ParameterSetName="ParamB", Mandatory=$true)]
        [Parameter(ParameterSetName="ParamC", Mandatory=$true)]
        [Parameter(ParameterSetName="Param5", Mandatory=$true,Position = 2)][switch]$Param5
    )
}

#Show-Command Test-ParametersNow
Get-Help Test-ParametersNow

这些是我从 Get-Help Test-ParametersNow 得到的结果

NAME
    Test-ParametersNow

SYNTAX
    Test-ParametersNow [-ParamZ ] <string> [-ParamA] <string> -Param2 <string> -Param3 -Param4 -Param5 [-Param1 <string>]  [<CommonParameters>]

    Test-ParametersNow [-ParamZ ] <string> [-Param5] [-ParamA <string>] [-ParamB] [-ParamC <string>]  [<CommonParameters>]

    Test-ParametersNow [-ParamZ ] <string> [-Param4] [-ParamA <string>] [-ParamB] [-ParamC <string>]  [<CommonParameters>]

    Test-ParametersNow [-ParamZ ] <string> [-Param3] [-ParamA <string>] [-ParamB] [-ParamC <string>]  [<CommonParameters>]

    Test-ParametersNow [-ParamZ ] <string> [-Param2] <string> [-ParamA <string>] [-ParamB] [-ParamC <string>]  [<CommonParameters>]

    Test-ParametersNow [-ParamZ ] <string> [-Param1] <string> [-ParamA <string>] [-ParamB] [-ParamC <string>]  [<CommonParameters>]

    Test-ParametersNow [-ParamZ ] <string> [-ParamB] -Param2 <string> -Param3 -Param4 -Param5 [-Param1 <string>]  [<CommonParameters>]

    Test-ParametersNow [-ParamZ ] <string> [-ParamC] <string> -Param2 <string> -Param3 -Param4 -Param5 [-Param1 <string>]  [<CommonParameters>]


ALIASES
    None


REMARKS
    None

【问题讨论】:

  • 欢迎来到 StackOverflow!你好像忘了问一个问题!请至少描述您正在寻找的预期行为是什么,以及当前行为与预期有何不同!
  • 我必须同意 Mathias 的观点。您可能在这里有一个有趣且可以回答的问题,但我们需要明确您的预期输出,您希望它如何工作?同时,看看this answer helps you at all.
  • 我的问题是如何设置参数集,使其只接受三个参数。
    例如:Test-ParametersNow -ReuiredParam string -ParamA string -Param1 string。如果我使用 ParamA,我不应该再选择 ParamB 或 ParamC,只有 Param1-Param5。
  • @briantist 我已经看过那个了,但我认为它不能回答我的问题。

标签: powershell parameters parameter-sets


【解决方案1】:

您已经定义了 8 个不同的参数集(A、B、C、1、2、3、4、5),但是由于 A、B 或 C 中的每一个都有 5 个选项,因此您似乎想要 15 个: A1 至 A5、B1 至 B5、C1 至 C5。每个参数(Z 除外)根据需要属于这些集合中的几个。像这样:

function Test-ParametersNow{
[CmdletBinding()]
    param (
        [parameter(Mandatory=$true,Position = 0)][string]$ParamZ,


        [Parameter(ParameterSetName="ParamA1", Mandatory=$true,Position = 1)]
        [Parameter(ParameterSetName="ParamA2", Mandatory=$true,Position = 1)]
        [Parameter(ParameterSetName="ParamA3", Mandatory=$true,Position = 1)]
        [Parameter(ParameterSetName="ParamA4", Mandatory=$true,Position = 1)]
        [Parameter(ParameterSetName="ParamA5", Mandatory=$true,Position = 1)]
        [ValidateNotNullOrEmpty()][string]$ParamA,

        [Parameter(ParameterSetName="ParamB1", Mandatory=$true,Position = 1)]
        [Parameter(ParameterSetName="ParamB2", Mandatory=$true,Position = 1)]
        [Parameter(ParameterSetName="ParamB3", Mandatory=$true,Position = 1)]
        [Parameter(ParameterSetName="ParamB4", Mandatory=$true,Position = 1)]
        [Parameter(ParameterSetName="ParamB5", Mandatory=$true,Position = 1)]
        [switch]$ParamB,

        [Parameter(ParameterSetName="ParamC1", Mandatory=$true,Position = 1)]
        [Parameter(ParameterSetName="ParamC2", Mandatory=$true,Position = 1)]
        [Parameter(ParameterSetName="ParamC3", Mandatory=$true,Position = 1)]
        [Parameter(ParameterSetName="ParamC4", Mandatory=$true,Position = 1)]
        [Parameter(ParameterSetName="ParamC5", Mandatory=$true,Position = 1)]
        [ValidateNotNullOrEmpty()][string]$ParamC,

        [Parameter(ParameterSetName="ParamA1", Mandatory=$true,Position = 2)]
        [Parameter(ParameterSetName="ParamB1", Mandatory=$true,Position = 2)]
        [Parameter(ParameterSetName="ParamC1", Mandatory=$true,Position = 2)]
        [ValidateNotNullOrEmpty()][string]$Param1,

        [Parameter(ParameterSetName="ParamA2", Mandatory=$true,Position = 2)]
        [Parameter(ParameterSetName="ParamB2", Mandatory=$true,Position = 2)]
        [Parameter(ParameterSetName="ParamC2", Mandatory=$true,Position = 2)]
        [ValidateNotNullOrEmpty()][string]$Param2,

        [Parameter(ParameterSetName="ParamA3", Mandatory=$true,Position = 2)]
        [Parameter(ParameterSetName="ParamB3", Mandatory=$true,Position = 2)]
        [Parameter(ParameterSetName="ParamC3", Mandatory=$true,Position = 2)]
        [switch]$Param3,

        [Parameter(ParameterSetName="ParamA4", Mandatory=$true,Position = 2)]
        [Parameter(ParameterSetName="ParamB4", Mandatory=$true,Position = 2)]
        [Parameter(ParameterSetName="ParamC4", Mandatory=$true,Position = 2)]
        [switch]$Param4,

        [Parameter(ParameterSetName="ParamA5", Mandatory=$true,Position = 2)]
        [Parameter(ParameterSetName="ParamB5", Mandatory=$true,Position = 2)]
        [Parameter(ParameterSetName="ParamC5", Mandatory=$true,Position = 2)]
        [switch]$Param5
    )
}

【讨论】:

    猜你喜欢
    • 2021-04-14
    • 2014-10-22
    • 1970-01-01
    • 2019-03-30
    • 1970-01-01
    • 1970-01-01
    • 2011-07-13
    • 2021-02-18
    • 2015-11-09
    相关资源
    最近更新 更多