Public/Initialize-Tenant.ps1
function Initialize-Tenant { param( [Parameter(Mandatory)] [string]$TenantId) process { # Start by getting consent for our application. Set-SAMConsent -CustomerTenantId $TenantId # Connect to MS Graph Connect-CustomerGraph -CustomerTenantId $TenantId $CustomerOrganization = Get-MgOrganization $CustomerInitialDomain = $CustomerOrganization.VerifiedDomains | Where-Object { $_.IsInitial -eq $true } # Disable Security Defaults try { $SecurityDefaults = Get-MgPolicyIdentitySecurityDefaultEnforcementPolicy if($SecurityDefaults.IsEnabled) { Update-MgPolicyIdentitySecurityDefaultEnforcementPolicy -IsEnabled:$false | Out-Null Write-Host "Security Defaults has been successfully disabled!" -ForegroundColor Green } else { Write-Host "Security Defaults is already disabled, skipping.." -ForegroundColor Yellow } } catch { Write-Error "Failed to disable Security Defaults: $_" } # Create Jysk IT Administrator try { $Users = Get-MgUser -All if($Users.UserPrincipalName -notcontains "jyskit-adm@$($CustomerInitialDomain.Name)") { Write-Host "Jysk IT Administrator does not exist, creating.." $PasswordProfile = @{ Password = (Get-RandomPassword -PasswordLength 16) ForceChangePasswordNextSignIn = $false ForceChangePasswordNextSignInWithMfa = $false } $AdminUser = New-MgUser -DisplayName "Jysk IT Administrator" -PasswordProfile $PasswordProfile -AccountEnabled -MailNickname "jyskit-adm" -UserPrincipalName "jyskit-adm@$($CustomerInitialDomain.Name)" Write-Host "Created Jysk IT Administrator: $($AdminUser.UserPrincipalName) with password $($PasswordProfile.Password)" -ForegroundColor Green } else { Write-Host "Jysk IT Administrator already exists, skipping.." -ForegroundColor Yellow $AdminUser = $Users | Where-Object { $_.UserPrincipalName -eq "jyskit-adm@$($CustomerInitialDomain.Name)" } } } catch { Write-Error "Failed to create Jysk IT Administrator: $_" } # Assign to Global Administrator group try { $Role = Get-MgDirectoryRole | Where-Object { $_.DisplayName -eq "Global Administrator" } $GlobalAdmins = Get-MgDirectoryRoleMemberAsUser -DirectoryRoleId $Role.Id if($GlobalAdmins.Id -notcontains $AdminUser.Id) { New-MgDirectoryRoleMemberByRef -DirectoryRoleId $Role.Id -BodyParameter @{"@odata.id" = "https://graph.microsoft.com/v1.0/directoryObjects/$($AdminUser.Id)"} Write-Host "Assigned Jysk IT Administrator to Global Administrator group" -ForegroundColor Green } else { Write-Host "Jysk IT Administrator is already a member of Global Administrator group" -ForegroundColor Yellow } } catch { Write-Error "Failed to assign Jysk IT Administrator to Global Administrator group: $_" } # Create a GDAP relationship Disconnect-CustomerGraph Connect-CustomerGraph -CustomerTenantId $PartnerTenantId $RelationshipName = "Jysk IT - $($CustomerOrganization.DisplayName)".Replace("æ","ae").Replace("ø","oe").Replace("å","aa").Replace("/","") $RelationshipParams = @{ displayName = $RelationshipName duration = "P730D" customer = @{ tenantId = $TenantId displayName = $CustomerOrganization.DisplayName } accessDetails = @{ unifiedRoles = @( @{ roleDefinitionId = "44367163-eba1-44c3-98af-f5787879f96a" } @{ roleDefinitionId = "29232cdf-9323-42fd-ade2-1d097af3e4de" } @{ roleDefinitionId = "31392ffb-586c-42d1-9346-e59415a2cc4e" } @{ roleDefinitionId = "45d8d3c5-c802-45c6-b32a-1d70b5e1e86e" } @{ roleDefinitionId = "b5a8dcf3-09d5-43a9-a639-8e29ef291470" } @{ roleDefinitionId = "744ec460-397e-42ad-a462-8b3f9747a02c" } @{ roleDefinitionId = "32696413-001a-46ae-978c-ce0f6b3620d2" } @{ roleDefinitionId = "892c5842-a9a6-463a-8041-72aa08ca3cf6" } @{ roleDefinitionId = "fdd7a751-b60b-444a-984c-02652fe8fa1c" } @{ roleDefinitionId = "a9ea8996-122f-4c74-9520-8edcd192826c" } @{ roleDefinitionId = "69091246-20e8-4a56-aa4d-066075b2a7a8" } @{ roleDefinitionId = "baf37b3a-610e-45da-9e62-d9d1e5e8914b" } @{ roleDefinitionId = "3d762c5a-1b6c-493f-843e-55a3b42923d4" } @{ roleDefinitionId = "eb1f4a8d-243a-41f0-9fbd-c7cdf6c5ef7c" } @{ roleDefinitionId = "31e939ad-9672-4796-9c2e-873181342d2d" } @{ roleDefinitionId = "74ef975b-6605-40af-a5d2-b9539d836353" } @{ roleDefinitionId = "d37c8bed-0711-4417-ba38-b4abe66ce4c2" } @{ roleDefinitionId = "2b745bdf-0803-4d80-aa65-822c4493daac" } @{ roleDefinitionId = "11648597-926c-4cf3-9c36-bcebb0ba8dcc" } @{ roleDefinitionId = "0964bb5e-9bdb-4d7b-ac29-58e794862a40" } @{ roleDefinitionId = "8835291a-918c-4fd7-a9ce-faa49f0cf7d9" } @{ roleDefinitionId = "f28a1f50-f6e7-4571-818b-6a12f2af6b6c" } @{ roleDefinitionId = "75941009-915a-4869-abe7-691bff18279e" } @{ roleDefinitionId = "f70938a0-fc10-4177-9e90-2178f8765737" } @{ roleDefinitionId = "fcf91098-03e3-41a9-b5ba-6f0ec8188a12" } @{ roleDefinitionId = "e3973bdf-4987-49ae-837a-ba8e231c7286" } @{ roleDefinitionId = "6e591065-9bad-43ed-90f3-e9424366d2f0" } @{ roleDefinitionId = "0f971eea-41eb-4569-a71e-57bb8a3eff1e" } @{ roleDefinitionId = "3a2c62db-5318-420d-8d74-23affee5d9d5" } @{ roleDefinitionId = "7698a772-787b-4ac8-901f-60d6b08affd2" } @{ roleDefinitionId = "38a96431-2bdf-4b4c-8b6e-5d3d8abac1a4" } @{ roleDefinitionId = "644ef478-e28f-4e28-b9dc-3fdde9aa0b1f" } @{ roleDefinitionId = "e8cef6f1-e4bd-4ea8-bc07-4b8d950f4477" } @{ roleDefinitionId = "9f06204d-73c1-4d4c-880a-6edb90606fd8" } @{ roleDefinitionId = "62e90394-69f5-4237-9190-012177145e10" } @{ roleDefinitionId = "11451d60-acb2-45eb-a7d6-43d0f0125c13" } @{ roleDefinitionId = "c4e39bd9-1100-46d3-8c65-fb160da0071f" } @{ roleDefinitionId = "b1be1c3e-b65d-4f19-8427-f6fa0d97feb9" } @{ roleDefinitionId = "729827e3-9c14-49f7-bb1b-9608f156bbb8" } @{ roleDefinitionId = "4d6ac14f-3453-41d0-bef9-a3e0c569773a" } @{ roleDefinitionId = "966707d0-3269-4727-9be2-8c3a10f19b9d" } @{ roleDefinitionId = "7be44c8a-adaf-4e2a-84d6-ab2649e08a13" } @{ roleDefinitionId = "e8611ab8-c189-46e8-94e1-60213ab1f814" } @{ roleDefinitionId = "fe930be7-5e62-47db-91af-98c3a49a38b1" } @{ roleDefinitionId = "9b895d92-2cd3-44c7-9d02-a6ac2d5ea5c3" } @{ roleDefinitionId = "cf1c38e5-3621-4004-a7cb-879624dced7c" } @{ roleDefinitionId = "158c047a-c907-4556-b7ef-446551a6b5f7" } @{ roleDefinitionId = "be2f45a1-457d-42af-a067-6ec1fa63bc45" } @{ roleDefinitionId = "95e79109-95c0-4d8e-aee3-d01accf2d47b" } @{ roleDefinitionId = "8ac3fc64-6eca-42ea-9e69-59f4c7b60eb2" } @{ roleDefinitionId = "aaf43236-0c0d-4d5f-883a-6955382ac081" } @{ roleDefinitionId = "3edaf663-341e-4475-9f94-5c398ef6c070" } @{ roleDefinitionId = "b0f54661-2d74-4c50-afa3-1ec803f12efe" } @{ roleDefinitionId = "f023fd81-a637-4b56-95fd-791ac0226033" } @{ roleDefinitionId = "d29b2b05-8046-44ba-8758-1e26182fcf32" } @{ roleDefinitionId = "9360feb5-f418-4baa-8175-e2a00bac4301" } @{ roleDefinitionId = "8329153b-31d0-4727-b945-745eb3bc5f31" } @{ roleDefinitionId = "88d8e3e3-8f55-4a1e-953a-9b9898b8876b" } @{ roleDefinitionId = "5d6b6bb7-de71-4623-b4af-96380a352509" } @{ roleDefinitionId = "f2ef992c-3afb-46b9-b7cf-a126ee74c451" } @{ roleDefinitionId = "ac16e43d-7b2d-40e0-ac05-243ff356ab5b" } @{ roleDefinitionId = "790c1fb9-7f7d-4f88-86a1-ef1f95c05c1b" } @{ roleDefinitionId = "4a5d8f65-41da-4de4-8968-e035b65339cf" } @{ roleDefinitionId = "75934031-6c7e-415a-99d7-48dbd49e875e" } @{ roleDefinitionId = "17315797-102d-40b4-93e0-432062caca18" } @{ roleDefinitionId = "e6d1a23a-da11-4be4-9570-befc86d067a7" } @{ roleDefinitionId = "194ae4cb-b126-40b2-bd5b-6091b380977d" } @{ roleDefinitionId = "5f2222b1-57c3-48ba-8ad5-d4759f1fde6f" } @{ roleDefinitionId = "7495fdc4-34c4-4d15-a289-98788ce399fd" } @{ roleDefinitionId = "5c4f9dcd-47dc-4cf7-8c9a-9e4207cbfc91" } @{ roleDefinitionId = "0526716b-113d-4c15-b2c8-68e3c22b9f80" } @{ roleDefinitionId = "9c6df0f2-1e7c-4dc3-b195-66dfbd24aa8f" } @{ roleDefinitionId = "c430b396-e693-46cc-96f3-db01bf8bb62a" } ) } } try { $Relationship = New-MgTenantRelationshipDelegatedAdminRelationship -BodyParameter $RelationshipParams Write-Host "Created new GDAP relationship: $($Relationship.DisplayName)" -ForegroundColor Green } catch { Write-Error "Failed to create GDAP relationship: $_" } $RelationshipRequestParams = @{ action = "lockForApproval" } try { New-MgTenantRelationshipDelegatedAdminRelationshipRequest -DelegatedAdminRelationshipId $Relationship.Id -BodyParameter $RelationshipRequestParams | Out-Null Write-Host "Sucessfully locked relationship for approval" -ForegroundColor Green } catch { Write-Error "Failed to lock relationship for approval: $_" } $InvitationLink = "https://admin.microsoft.com/AdminPortal/Home#/partners/invitation/granularAdminRelationships/$($Relationship.Id)" if($AdminUser) { $LoginUrl = "https://admin.microsoft.com/login?username=$($AdminUser.UserPrincipalName)" Write-Host "Username: $($AdminUser.UserPrincipalName)" Write-Host "Password: $($PasswordProfile.Password)" Start-Process -FilePath "msedge.exe" -Argumentlist "-inprivate", "$($LoginUrl)" Set-Clipboard $($PasswordProfile.Password) Write-Host "Opened login page in Edge inPrivate, and copied password to clipboard. ($($LoginUrl))" Read-Host "Press any key to continue when logged in.." Write-Host "Opened GDAP invitation link in Edge inPrivate. ($($InvitationLink))" Start-Process -FilePath "msedge.exe" -Argumentlist "-inprivate", "$($InvitationLink)" } else { $LoginUrl = "https://admin.microsoft.com/login" Start-Process -FilePath "msedge.exe" -Argumentlist "-inprivate", "$($LoginUrl)" Write-Host "Opened login page in Edge inprivate ($($LoginUrl))" Read-Host "Press any key to continue when logged in.." Write-Host "Opened GDAP invitation link in Edge inPrivate. ($($InvitationLink))" Start-Process -FilePath "msedge.exe" -Argumentlist "-inprivate", "$($InvitationLink)" } # Wait for approval $RelationshipCheck = Get-MgTenantRelationshipDelegatedAdminRelationship -DelegatedAdminRelationshipId $Relationship.Id while($RelationshipCheck.Status -ne "active") { Write-Host "Waiting for approval.." Start-Sleep -Seconds 5 $RelationshipCheck = Get-MgTenantRelationshipDelegatedAdminRelationship -DelegatedAdminRelationshipId $Relationship.Id } Write-Host "GDAP relationship approved!" -ForegroundColor Green # First access assignment try { New-MgTenantRelationshipDelegatedAdminRelationshipAccessAssignment -DelegatedAdminRelationshipId $Relationship.Id -BodyParameter $FirstAccessAssignmentParams | Out-Null Write-Host "Created first access assignment" -ForegroundColor Green } catch { Write-Error "Failed to create first access assignment: $_" } # Second access assignment try { New-MgTenantRelationshipDelegatedAdminRelationshipAccessAssignment -DelegatedAdminRelationshipId $Relationship.Id -BodyParameter $SecondAccessAssignmentParams | Out-Null Write-Host "Created second access assignment" -ForegroundColor Green } catch { Write-Error "Failed to create second access assignment: $_" } } } |