1

I need to get three parameters for a function that I am creating. Parameter one must be in all parameter sets. The other two parameters has multiple permutations.

I tried playing around with the parameter sets and I've searched for other threads, but none of them seem to be discussing this scenario.

My question is how do I create the parameter sets so that there are only the following possibilities.

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

Here is my function.

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

These are the results that I get from 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
4
  • 3
    Welcome to StackOverflow! You seem to have forgotten to ask a question! Please, at the very least, describe what the expected behavior you're looking for is, and how the current behavior deviates from that expectation! Commented Aug 1, 2019 at 13:55
  • I have to agree with Mathias on this one. You likely have an interesting and answerable question here, but we need clarity on your expected output, how do you want it to work? In the meantime, see if this answer helps you at all. Commented Aug 1, 2019 at 14:48
  • My question is how do I set up the parameter sets so that it will only accept the three parameters.<br/>For example: Test-ParametersNow -ReuiredParam string -ParamA string -Param1 string.<br/>If I use ParamA I should not have an option anymore for ParamB or ParamC, only Param1-Param5. Commented Aug 1, 2019 at 17:53
  • @briantist I saw that one already, but I don't think it answers my question. Commented Aug 1, 2019 at 18:01

1 Answer 1

0

You have defined 8 different parameter sets (A,B,C,1,2,3,4,5), but since each of A, B, or C each has 5 options, it seems like you want 15: A1 thru A5, B1 thru B5, C1 thru C5. Each parameter (except Z), belongs to several of these sets as required. Like this:

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
    )
}
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.