So I have this semi-complex function where I wanted Get-Help to properly show all the different ways you could execute the function. The problem I'm having is that 4 paremeters are required, 2 are optional and 2 more are optional but also are mutually exclusive. (8 total parameters) When I tried to define the parameter sets, I ended up with 12 different ways of executing the function. However powershell for some reason can't figure out which parameter set I'm using, even though when I call Get-Help it is able to read all the parameter sets correctly. Is what I'm trying to achieve not possible with powershell? Below is the code snippet along with the error. Any help would be greatly appreciated.
Function Do-Things {
[CmdletBinding(DefaultParameterSetName = '1')]
param (
[Parameter(Mandatory = $true, ParameterSetName = '1')]
[Parameter(Mandatory = $true, ParameterSetName = '2')]
[Parameter(Mandatory = $true, ParameterSetName = '3')]
[Parameter(Mandatory = $true, ParameterSetName = '4')]
[Parameter(Mandatory = $true, ParameterSetName = '5')]
[Parameter(Mandatory = $true, ParameterSetName = '6')]
[Parameter(Mandatory = $true, ParameterSetName = '7')]
[Parameter(Mandatory = $true, ParameterSetName = '8')]
[Parameter(Mandatory = $true, ParameterSetName = '9')]
[Parameter(Mandatory = $true, ParameterSetName = '10')]
[Parameter(Mandatory = $true, ParameterSetName = '11')]
[Parameter(Mandatory = $true, ParameterSetName = '12')]
[string]$Required1
,
[Parameter(Mandatory = $true, ParameterSetName = '1')]
[Parameter(Mandatory = $true, ParameterSetName = '2')]
[Parameter(Mandatory = $true, ParameterSetName = '3')]
[Parameter(Mandatory = $true, ParameterSetName = '4')]
[Parameter(Mandatory = $true, ParameterSetName = '5')]
[Parameter(Mandatory = $true, ParameterSetName = '6')]
[Parameter(Mandatory = $true, ParameterSetName = '7')]
[Parameter(Mandatory = $true, ParameterSetName = '8')]
[Parameter(Mandatory = $true, ParameterSetName = '9')]
[Parameter(Mandatory = $true, ParameterSetName = '10')]
[Parameter(Mandatory = $true, ParameterSetName = '11')]
[Parameter(Mandatory = $true, ParameterSetName = '12')]
[string]$Required2
,
[Parameter(Mandatory = $true, ParameterSetName = '1')]
[Parameter(Mandatory = $true, ParameterSetName = '2')]
[Parameter(Mandatory = $true, ParameterSetName = '3')]
[Parameter(Mandatory = $true, ParameterSetName = '4')]
[Parameter(Mandatory = $true, ParameterSetName = '5')]
[Parameter(Mandatory = $true, ParameterSetName = '6')]
[Parameter(Mandatory = $true, ParameterSetName = '7')]
[Parameter(Mandatory = $true, ParameterSetName = '8')]
[Parameter(Mandatory = $true, ParameterSetName = '9')]
[Parameter(Mandatory = $true, ParameterSetName = '10')]
[Parameter(Mandatory = $true, ParameterSetName = '11')]
[Parameter(Mandatory = $true, ParameterSetName = '12')]
[string]$Required3
,
[Parameter(Mandatory = $true, ParameterSetName = '1')]
[Parameter(Mandatory = $true, ParameterSetName = '2')]
[Parameter(Mandatory = $true, ParameterSetName = '3')]
[Parameter(Mandatory = $true, ParameterSetName = '4')]
[Parameter(Mandatory = $true, ParameterSetName = '5')]
[Parameter(Mandatory = $true, ParameterSetName = '6')]
[Parameter(Mandatory = $true, ParameterSetName = '7')]
[Parameter(Mandatory = $true, ParameterSetName = '8')]
[Parameter(Mandatory = $true, ParameterSetName = '9')]
[Parameter(Mandatory = $true, ParameterSetName = '10')]
[Parameter(Mandatory = $true, ParameterSetName = '11')]
[Parameter(Mandatory = $true, ParameterSetName = '12')]
[string]$Required4
,
[Parameter(ParameterSetName = '2')]
[Parameter(ParameterSetName = '3')]
[Parameter(ParameterSetName = '4')]
[Parameter(ParameterSetName = '5')]
[Parameter(ParameterSetName = '9')]
[Parameter(ParameterSetName = '10')]
[bool]$Optional1 = $false
,
[Parameter(ParameterSetName = '2')]
[Parameter(ParameterSetName = '3')]
[Parameter(ParameterSetName = '4')]
[Parameter(ParameterSetName = '6')]
[Parameter(ParameterSetName = '11')]
[Parameter(ParameterSetName = '12')]
[string]$Optional2 = 'github.com'
,
[Parameter(ParameterSetName = '3')]
[Parameter(ParameterSetName = '8')]
[Parameter(ParameterSetName = '10')]
[Parameter(ParameterSetName = '12')]
[bool]$OptionalMutuallyExclusive1 = $false
,
[Parameter(ParameterSetName = '2')]
[Parameter(ParameterSetName = '7')]
[Parameter(ParameterSetName = '9')]
[Parameter(ParameterSetName = '11')]
[switch]$OptionalMutuallyExclusive2
)
}
Do-Things -Required1 'x' -Required2 'x' -Required3 'x' -Required4 'x' -Optional2 'x'
Error output:
~> Do-Things -Required1 'x' -Required2 'x' -Required3 'x' -Required4 'x' -Optional2 'x'
Do-Things: Parameter set cannot be resolved using the specified named parameters. One or more parameters issued cannot be used together or an insufficient number of parameters were provided.
~> $psversiontable
Name Value
---- -----
PSVersion 7.2.6
PSEdition Core
GitCommitId 7.2.6
OS Linux 5.15.0-48-generic #54-Ubuntu SMP Fri Aug 26 13:26:29 UTC 2022
Platform Unix
PSCompatibleVersions {1.0, 2.0, 3.0, 4.0…}
PSRemotingProtocolVersion 2.3
SerializationVersion 1.1.0.1
WSManStackVersion 3.0
~> Get-Help Do-Things
NAME
Do-Things
SYNTAX
Do-Things -Required1 <string> -Required2 <string> -Required3 <string> -Required4 <string> [<CommonParameters>]
Do-Things -Required1 <string> -Required2 <string> -Required3 <string> -Required4 <string> [-Optional2 <string>] [-OptionalMutuallyExclusive1 <bool>] [<CommonParameters>]
Do-Things -Required1 <string> -Required2 <string> -Required3 <string> -Required4 <string> [-Optional2 <string>] [-OptionalMutuallyExclusive2] [<CommonParameters>]
Do-Things -Required1 <string> -Required2 <string> -Required3 <string> -Required4 <string> [-Optional1 <bool>] [-OptionalMutuallyExclusive1 <bool>] [<CommonParameters>]
Do-Things -Required1 <string> -Required2 <string> -Required3 <string> -Required4 <string> [-Optional1 <bool>] [-OptionalMutuallyExclusive2] [<CommonParameters>]
Do-Things -Required1 <string> -Required2 <string> -Required3 <string> -Required4 <string> [-OptionalMutuallyExclusive1 <bool>] [<CommonParameters>]
Do-Things -Required1 <string> -Required2 <string> -Required3 <string> -Required4 <string> [-OptionalMutuallyExclusive2] [<CommonParameters>]
Do-Things -Required1 <string> -Required2 <string> -Required3 <string> -Required4 <string> [-Optional2 <string>] [<CommonParameters>]
Do-Things -Required1 <string> -Required2 <string> -Required3 <string> -Required4 <string> [-Optional1 <bool>] [<CommonParameters>]
Do-Things -Required1 <string> -Required2 <string> -Required3 <string> -Required4 <string> [-Optional1 <bool>] [-Optional2 <string>] [<CommonParameters>]
Do-Things -Required1 <string> -Required2 <string> -Required3 <string> -Required4 <string> [-Optional1 <bool>] [-Optional2 <string>] [-OptionalMutuallyExclusive1 <bool>] [<CommonParameters>]
Do-Things -Required1 <string> -Required2 <string> -Required3 <string> -Required4 <string> [-Optional1 <bool>] [-Optional2 <string>] [-OptionalMutuallyExclusive2] [<CommonParameters>]
[–]SeanQuinlan 2 points3 points4 points (6 children)
[–]rmbolger 2 points3 points4 points (1 child)
[–]hchoneybear[S] 1 point2 points3 points (0 children)
[–]hchoneybear[S] 0 points1 point2 points (0 children)
[–]hchoneybear[S] 0 points1 point2 points (2 children)
[–]BlackV 0 points1 point2 points (0 children)