Multiple parameter sets and PowerShell

后端 未结 3 581
感动是毒
感动是毒 2020-12-29 05:44

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:



        
3条回答
  •  独厮守ぢ
    2020-12-29 06:14

    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
        )
    }
    

提交回复
热议问题