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
For example: Test-ParametersNow -ReuiredParam string -ParamA string -Param1 string.
If I use ParamA I should not have an option anymore for ParamB or ParamC, only Param1-Param5. – Binyomin Kolodny Aug 01 '19 at 17:53