I am building a function which will have three distinct parameter sets, and two of those sets will overlap with the third. The options would look like this:
By adding two more Parameter Sets you can do what you want. This is needed because you have 3 sets now, plus a non-set parameter (which technically puts it in the __AllParameterSets
set if I remember right). So that's 4 ways of doing it. You need 6 ways of doing it if I am reading your question correctly. You want all of the following options:
Move-AccountOut -Username []
Move-AccountOut -Username [-RetainGroups] [-TransferHomeDrive] [-OldServer ] [-NewServer ] []
Move-AccountOut -Username [-RetainGroups] []
Move-AccountOut -Username [-RemoveFromAllGroups] [-TransferHomeDrive] [-OldServer ] [-NewServer ] []
Move-AccountOut -Username [-RemoveFromAllGroups] []
Move-AccountOut -Username -OldServer -NewServer [-TransferHomeDrive] []
So we will add the RemoveFromAllGroupsWTran
and RetainGroupsWTran
Parameter Sets, add them both to $TransferHomeDrive
, $OldServer
, and $NewServer
(removing the other related set names from them), then add each to its respective switch parameter. It ends up looking like this:
function Move-AccountOut {
[CmdletBinding(DefaultParameterSetName='NoTransferHomeDrive')]
Param(
[Parameter(Mandatory=$True, ValueFromPipeline=$True, ValueFromPipelineByPropertyName=$True)]
[string]$Username,
[Parameter(ParameterSetName='RetainGroups')]
[Parameter(ParameterSetName='RetainGroupsWTran')]
[switch]$RetainGroups,
[Parameter(ParameterSetName='RemoveFromAllGroups')]
[Parameter(ParameterSetName='RemoveFromAllGroupsWTran')]
[switch]$RemoveFromAllGroups,
[Parameter(ParameterSetName='TransferHomeDrive', Mandatory=$False)]
[Parameter(ParameterSetName='RetainGroupsWTran')]
[Parameter(ParameterSetName='RemoveFromAllGroupsWTran')]
[switch]$TransferHomeDrive,
[Parameter(ParameterSetName='TransferHomeDrive', Mandatory=$True)]
[Parameter(ParameterSetName='RetainGroupsWTran')]
[Parameter(ParameterSetName='RemoveFromAllGroupsWTran')]
[string]$OldServer,
[Parameter(ParameterSetName='TransferHomeDrive', Mandatory=$True)]
[Parameter(ParameterSetName='RetainGroupsWTran')]
[Parameter(ParameterSetName='RemoveFromAllGroupsWTran')]
[string]$NewServer
)
}