Private/GDAP/New-GDAPRelationship.ps1
function New-GDAPRelationship { [CmdletBinding()] param( [Parameter(Mandatory)] [string]$CustomerTenantId ) try { $customer = Get-PartnerCustomer -CustomerTenantId $CustomerTenantId if (!$customer) { Write-ModuleLog "Customer with tenant ID $CustomerTenantId not found" -Level Error -Component 'GDAP' -ThrowError } # Create relationship request parameters $relationshipParams = @{ displayName = "Jysk IT - $(New-Guid)" duration = "P730D" autoExtendDuration = "P180D" customer = @{ tenantId = $CustomerTenantId displayName = $customer.DisplayName } accessDetails = $script:Config.GDAP.AccessDetails } # Connect to partner tenant Connect-CustomerGraph -CustomerTenantId $script:Config.PartnerTenantId -FlowType 'Delegated' -Force # Create the relationship Write-Host $relationshipParams $relationship = New-MgTenantRelationshipDelegatedAdminRelationship -BodyParameter $relationshipParams Write-ModuleLog -Message "Created new GDAP relationship: $($relationship.DisplayName)" -Level Info -Component 'GDAP' # Lock for approval New-MgTenantRelationshipDelegatedAdminRelationshipRequest ` -DelegatedAdminRelationshipId $relationship.Id ` -Action "LockForApproval" | Out-Null Write-ModuleLog -Message "Successfully locked relationship $($relationship.DisplayName) for approval" -Level Info -Component 'GDAP' return $relationship } catch { Write-ModuleLog -Message "Failed to create GDAP relationship: $($_.Exception.Message)" -Level Error -Component 'GDAP' -ErrorRecord $_ -ThrowError } } function Wait-GDAPApproval { [CmdletBinding()] param( [Parameter(Mandatory)] [string]$RelationshipId, [Parameter()] [int]$TimeoutMinutes = 30 ) try { $timeout = (Get-Date).AddMinutes($TimeoutMinutes) while ((Get-Date) -lt $timeout) { $relationship = Get-MgTenantRelationshipDelegatedAdminRelationship -DelegatedAdminRelationshipId $RelationshipId if ($relationship.Status -eq "active") { Write-ModuleLog -Message "GDAP relationship is now active" -Level Info -Component 'GDAP' return $true } Write-ModuleLog -Message "Waiting for GDAP approval..." -Level Info -Component 'GDAP' Start-Sleep -Seconds 10 } Write-ModuleLog -Message "Timeout waiting for GDAP approval" -Level Error -Component 'GDAP' -ThrowError } catch { Write-ModuleLog -Message "Failed while waiting for GDAP approval: $($_.Exception.Message)" -Level Error -Component 'GDAP' -ErrorRecord $_ -ThrowError } } |