Groups/Set-GPPGroup.ps1
function Set-GPPGroup { [OutputType('GPPItemGroup')] Param ( [Parameter(ParameterSetName = 'ByGPONameObject', Mandatory)] [Parameter(ParameterSetName = 'ByGPOIdObject', Mandatory)] [GPPItemGroup]$InputObject, [Parameter(ParameterSetName = 'ByGPONameGroupName', Mandatory)] [Parameter(ParameterSetName = 'ByGPOIdGroupName', Mandatory)] [string]$Name, [Parameter(ParameterSetName = 'ByGPONameGroupSID', Mandatory)] [Parameter(ParameterSetName = 'ByGPOIdGroupSID', Mandatory)] [System.Security.Principal.SecurityIdentifier]$SID, [Parameter(ParameterSetName = 'ByGPONameObject', Mandatory)] [Parameter(ParameterSetName = 'ByGPONameGroupName', Mandatory)] [Parameter(ParameterSetName = 'ByGPONameGroupSID', Mandatory)] [string]$GPOName, [Parameter(ParameterSetName = 'ByGPOIdObject', Mandatory)] [Parameter(ParameterSetName = 'ByGPOIdGroupName', Mandatory)] [Parameter(ParameterSetName = 'ByGPOIdGroupSID', Mandatory)] [guid]$GPOId, [Parameter(ParameterSetName = 'ByGPONameObject')] [Parameter(ParameterSetName = 'ByGPOIdObject')] [Parameter(ParameterSetName = 'ByGPONameGroupName')] [Parameter(ParameterSetName = 'ByGPOIdGroupName')] [Parameter(ParameterSetName = 'ByGPONameGroupSID')] [Parameter(ParameterSetName = 'ByGPOIdGroupSID')] [GPPContext]$Context = $ModuleWideDefaultGPPContext, [Parameter(ParameterSetName = 'ByGPONameObject')] [Parameter(ParameterSetName = 'ByGPOIdObject')] [Parameter(ParameterSetName = 'ByGPONameGroupName')] [Parameter(ParameterSetName = 'ByGPOIdGroupName')] [Parameter(ParameterSetName = 'ByGPONameGroupSID')] [Parameter(ParameterSetName = 'ByGPOIdGroupSID')] [GPPItemActionDisplay]$Action, [Parameter(ParameterSetName = 'ByGPONameObject')] [Parameter(ParameterSetName = 'ByGPOIdObject')] [Parameter(ParameterSetName = 'ByGPONameGroupName')] [Parameter(ParameterSetName = 'ByGPOIdGroupName')] [Parameter(ParameterSetName = 'ByGPONameGroupSID')] [Parameter(ParameterSetName = 'ByGPOIdGroupSID')] [string]$NewName, [Parameter(ParameterSetName = 'ByGPONameObject')] [Parameter(ParameterSetName = 'ByGPOIdObject')] [Parameter(ParameterSetName = 'ByGPONameGroupName')] [Parameter(ParameterSetName = 'ByGPOIdGroupName')] [Parameter(ParameterSetName = 'ByGPONameGroupSID')] [Parameter(ParameterSetName = 'ByGPOIdGroupSID')] [string]$Description, [Parameter(ParameterSetName = 'ByGPONameObject')] [Parameter(ParameterSetName = 'ByGPOIdObject')] [Parameter(ParameterSetName = 'ByGPONameGroupName')] [Parameter(ParameterSetName = 'ByGPOIdGroupName')] [Parameter(ParameterSetName = 'ByGPONameGroupSID')] [Parameter(ParameterSetName = 'ByGPOIdGroupSID')] [switch]$DeleteAllUsers, [Parameter(ParameterSetName = 'ByGPONameObject')] [Parameter(ParameterSetName = 'ByGPOIdObject')] [Parameter(ParameterSetName = 'ByGPONameGroupName')] [Parameter(ParameterSetName = 'ByGPOIdGroupName')] [Parameter(ParameterSetName = 'ByGPONameGroupSID')] [Parameter(ParameterSetName = 'ByGPOIdGroupSID')] [switch]$DeleteAllGroups, [Parameter(ParameterSetName = 'ByGPONameObject')] [Parameter(ParameterSetName = 'ByGPOIdObject')] [Parameter(ParameterSetName = 'ByGPONameGroupName')] [Parameter(ParameterSetName = 'ByGPOIdGroupName')] [Parameter(ParameterSetName = 'ByGPONameGroupSID')] [Parameter(ParameterSetName = 'ByGPOIdGroupSID')] [switch]$Disable, [Parameter(ParameterSetName = 'ByGPONameObject')] [Parameter(ParameterSetName = 'ByGPOIdObject')] [Parameter(ParameterSetName = 'ByGPONameGroupName')] [Parameter(ParameterSetName = 'ByGPOIdGroupName')] [Parameter(ParameterSetName = 'ByGPONameGroupSID')] [Parameter(ParameterSetName = 'ByGPOIdGroupSID')] [GPPItemGroupMember[]]$Members, [Parameter(ParameterSetName = 'ByGPONameObject')] [Parameter(ParameterSetName = 'ByGPOIdObject')] [Parameter(ParameterSetName = 'ByGPONameGroupName')] [Parameter(ParameterSetName = 'ByGPOIdGroupName')] [Parameter(ParameterSetName = 'ByGPONameGroupSID')] [Parameter(ParameterSetName = 'ByGPOIdGroupSID')] [switch]$PassThru ) if (-not $GPOId) { $GPOId = Convert-GPONameToID -Name $GPOName } $GroupsSection = Get-GPPSection -GPOId $GPOId -Context $Context -Type ([GPPType]::Groups) if ($GroupsSection) { $InternalAction = if ($PSBoundParameters.ContainsKey('Action')) { [GPPItemAction]$Action.value__ } else { [GPPItemAction]::U } if (-not $InputObject) { $GetGroupFunctionParameters = @{} if ($SID) { $GetGroupFunctionParameters.Add('SID', $SID) } else { $GetGroupFunctionParameters.Add('Name', $Name) } if ($GroupsSection) { $InputObject = Get-GPPGroup @GetGroupFunctionParameters -GPPSection $GroupsSection } else { New-GPPGroup @GetGroupFunctionParameters -Create:$true } } if ($PSBoundParameters.ContainsKey('Action')) { $InputObject.Properties.Action = $InternalAction } if ($NewName) { if ($InternalAction -eq [GPPItemAction]::U) { $InputObject.Properties.NewName = $NewName if (-not $PSBoundParameters.ContainsKey('Action')) { $InputObject.Properties.Action = $InternalAction } } } if ($Description -and $InternalAction -ne [GPPItemAction]::D) { $InputObject.Properties.Description = $Description } if ($DeleteAllUsers -and $InternalAction -ne [GPPItemAction]::D) { $InputObject.Properties.DeleteAllUsers = $DeleteAllUsers } if ($DeleteAllGroups -and $InternalAction -ne [GPPItemAction]::D) { $InputObject.Properties.DeleteAllGroups = $DeleteAllGroups } if ($Members -and $InternalAction -ne [GPPItemAction]::D) { $InputObject.Properties.Members = $Members } # The NewName property applicable to the Update action only if ($InputObject.Properties.Action -eq [GPPItemAction]::C -and $InputObject.Properties.NewName) { $InputObject.Properties.NewName = $null } # Items with the Delete action, should not have all these properties (GUI sets it this way) if ($InputObject.Properties.Action -eq [GPPItemAction]::D) { $InputObject.Properties.NewName = $null $InputObject.Properties.Description = $null $InputObject.Properties.DeleteAllUsers = $null $InputObject.Properties.DeleteAllGroups = $null $InputObject.Properties.Members = $null } $InputObject.disabled = $Disable $InputObject.image = $InputObject.Properties.action.value__ # Fixes up the item's icon in case we changed its action $NewGroupsSection = Remove-GPPGroup -GPPSection $GroupsSection -UID $InputObject.uid if ($NewGroupsSection) { $NewGroupsSection.Members.Add($InputObject) } else { $NewGroupsSection = [GPPSectionGroups]::new($InputObject, $false) } if ($PassThru) { $InputObject } Set-GPPSection -InputObject $NewGroupsSection -GPOId $GPOId -Context $Context -Type ([GPPType]::Groups) } } |