Public/Copy-AvdApplicationGroupPermissions.ps1
function Copy-AvdApplicationGroupPermissions { <# .SYNOPSIS Copies application group permissions to another application group .DESCRIPTION The function will help you copy permissions to another application group. This based on an existing one. .PARAMETER FromApplicationGroupName Enter the AVD source application group name .PARAMETER FromResourceGroupName Enter the AVD source application group resourcegroup name .PARAMETER ToApplicationGroupName Enter the AVD destination application group name .PARAMETER ToResourceGroupName Enter the AVD destination application group resourcegroup name .PARAMETER FromAppGroupId Enter the AVD source application group resourceId .PARAMETER ToAppGroupId Enter the AVD new application group resourceId .EXAMPLE Copy-AvdApplicationGroupPermissions -FromApplicationGroupName avd-appgroup-1 -FromResourceGroupName rg-avd-01 -ToApplicationGroupName avd-appgroup-2 -ToResourceGroupName rg-avd-01 .EXAMPLE Copy-AvdApplicationGroupPermissions -FromAppGroupId "/subscriptions/.../FromAppgroup" -ToAppGroupId "/subscriptions/.../ToAppgroup" #> [CmdletBinding(DefaultParameterSetName="Name")] param ( [Parameter(Mandatory, ParameterSetName = "Name")] [ValidateNotNullOrEmpty()] [string]$FromApplicationGroupName, [Parameter(Mandatory, ParameterSetName = "Name")] [ValidateNotNullOrEmpty()] [string]$FromResourceGroupName, [Parameter(Mandatory, ParameterSetName = "Name")] [ValidateNotNullOrEmpty()] [string]$ToApplicationGroupName, [Parameter(Mandatory, ParameterSetName = "Name")] [ValidateNotNullOrEmpty()] [string]$ToResourceGroupName, [Parameter(Mandatory, ParameterSetName = "ResourceId")] [ValidateNotNullOrEmpty()] [string]$FromAppGroupId, [Parameter(Mandatory, ParameterSetName = "ResourceId")] [ValidateNotNullOrEmpty()] [string]$ToAppGroupId ) Begin { Write-Verbose "Start copying permissions" AuthenticationCheck $graphToken = GetAuthToken -resource $Script:GraphApiUrl } Process { switch ($PsCmdlet.ParameterSetName) { Name { Write-Verbose "Name and ResourceGroup provided" $FromApplicationResults = Get-AvdApplicationGroup -ApplicationGroupName $FromApplicationGroupName -ResourceGroupName $FromResourceGroupName $Scope = "/subscriptions/" + $Script:subscriptionId + "/resourcegroups/" + $FromResourceGroupName + "/providers/Microsoft.DesktopVirtualization/applicationgroups/" + $FromApplicationGroupName $AppGroupPermissionsParameters = @{ ApplicationGroupName = $ToApplicationGroupName ResourceGroupName = $ToResourceGroupName } } ResourceId { Write-Verbose "ResourceId provided" $FromApplicationResults = Get-AvdApplicationGroup -ResourceId $FromAppGroupId $Scope = $FromAppGroupId $AppGroupPermissionsParameters = @{ resourceId = $ToAppGroupId } } } $FromApplicationResults.assignments.properties | ? { $_.Scope -eq $Scope } | ForEach-Object { If ($_.principalType -eq 'User') { $graphUrl = $Script:GraphApiUrl + "/" + $script:GraphApiVersion + "/users/" + $_.principalId $identityInfo = Invoke-RestMethod -Method GET -Uri $graphUrl -Headers $graphToken Write-Verbose "Adding user $($identityInfo.userPrincipalName) to $ToApplicationGroupName" } Else { $graphUrl = $Script:GraphApiUrl + "/" + $script:GraphApiVersion + "/groups?`$filter=id eq '$($_.principalId)'" $identityInfo = (Invoke-RestMethod -Method GET -Uri $graphUrl -Headers $graphToken).value Write-Verbose "Adding group $($identityInfo.displayName) to $ToApplicationGroupName" } Add-AvdApplicationGroupPermissions @AppGroupPermissionsParameters -PrincipalId $_.principalId } } End {} } |