Public/New-SPOCrossTenantPartnerRelationship.ps1
|
function New-SPOCrossTenantPartnerRelationship { <# .SYNOPSIS The function creates a partnership for a Cross-Tenant SharePoint Online and/or OneDrive migration. .DESCRIPTION The function creates a partnership for a Cross-Tenant SharePoint Online and/or OneDrive migration. .PARAMETER SourceTenantInitialDomain [String] The mandatory parameter -SourceTenantInitialDomain configures the name of the migration source tenant. The value must be the fully-qualified initial domain name (e.g. 'company1.onmicrosoft.com') Alias: Source .PARAMETER TargetTenantInitialDomain [String] The mandatory parameter -TargetTenantInitialDomain configures the name of the migration target tenant. The value must be the fully-qualified initial domain name (e.g. 'company2.onmicrosoft.com') Alias: Tenant .OUTPUTS System.Boolean .COMPONENT Microsoft.SharePoint.Online.PowerShell .NOTES The function currently only supports interactive web login to work. Therefore, it is necessary to login/logoff multiple time to switch between tenants. Certificate based authentication is currently not supported but planned for future updates. .EXAMPLE New-SPOCrossTenantPartnerRelationship -SourceTenantName "company1" -TargetTenantName "company2" .EXAMPLE New-SPOCrossTenantPartnerRelationship "company1" "company2" .EXAMPLE New-SPOCTPartner -Source "company1" -Target "company2" #> [CmdletBinding(PositionalBinding=$false,HelpUri='https://github.com/uplink-systems/powershell-modules/UplinkSystems.Microsoft.Cloud')] [Alias('New-SPOCTPartner')] param( [Parameter(Mandatory=$true, Position=0)] [Alias('Source')] [ValidateScript({if ($_.EndsWith('.onmicrosoft.com')) {$true} else {throw "Invalid value: `"$_`"."}})] [String] $SourceTenantInitialDomain, [Parameter(Mandatory=$true, Position=1)] [Alias('Target')] [ValidateScript({if ($_.EndsWith('.onmicrosoft.com')) {$true} else {throw "Invalid value: `"$_`"."}})] [String] $TargetTenantInitialDomain ) begin { [Array]$Preferences = $ErrorActionPreference,$InformationPreference $ErrorActionPreference = 'SilentlyContinue' $InformationPreference = 'Continue' $Global:SourceTenantName = $SourceTenantInitialDomain.replace('.onmicrosoft.com','') $Global:TargetTenantName = $TargetTenantInitialDomain.replace('.onmicrosoft.com','') Initialize-Module -SharePointOnline | Out-Null } process{ $Global:SourceTenantAdminUrl = "https://$SourceTenantName-admin.sharepoint.com" $Global:TargetTenantAdminUrl = "https://$TargetTenantName-admin.sharepoint.com" $Global:SourceTenantHostUrl = "https://$SourceTenantName-my.sharepoint.com" $Global:TargetTenantHostUrl = "https://$TargetTenantName-my.sharepoint.com" Write-Information -MessageData "Setting tenant relationship in Source tenant... Connecting..." Connect-SPOService -Url $SourceTenantAdminUrl Set-SPOCrossTenantRelationship -Scenario MnA -PartnerRole Target -PartnerCrossTenantHostUrl $TargetTenantHostUrl | Out-Null Disconnect-SPOService Write-Information -MessageData "Setting tenant relationship in Target tenant... Connecting..." Connect-SPOService -Url $TargetTenantAdminUrl Set-SPOCrossTenantRelationship -Scenario MnA -PartnerRole Source -PartnerCrossTenantHostUrl $SourceTenantHostUrl | Out-Null Disconnect-SPOService Write-Information -MessageData "Verifying tenant relationship in Source tenant... Connecting..." Connect-SPOService -Url $SourceTenantAdminUrl $VerifySourceTenantCount = 0 do { $SourceTenantRelationshipTest = Test-SPOCrossTenantRelationship -Scenario MnA -PartnerRole Target -PartnerCrossTenantHostUrl $TargetTenantHostUrl if ($SourceTenantRelationshipTest.value -eq "GoodToProceed") { break } $VerifySourceTenantCount = $VerifySourceTenantCount + 1 Start-Sleep -Seconds 5 } until ($VerifySourceTenantCount -eq 6) Disconnect-SPOService Write-Information -MessageData "Verifying tenant relationship in Target tenant... Connecting..." Connect-SPOService -Url $TargetTenantAdminUrl $VerifyTargetTenantCount = 0 do { $TargetTenantRelationshipTest = Test-SPOCrossTenantRelationship -Scenario MnA -PartnerRole Source -PartnerCrossTenantHostUrl $SourceTenantHostUrl if ($TargetTenantRelationshipTest.value -eq "GoodToProceed") { break } $VerifyTargetTenantCount = $VerifyTargetTenantCount + 1 Start-Sleep -Seconds 5 } until ($VerifyTargetTenantCount -eq 6) Disconnect-SPOService # output result if (($SourceTenantRelationshipTest.value -eq "GoodToProceed") -and ($TargetTenantRelationshipTest.value -eq "GoodToProceed")) { Write-Information -MessageData "Tenant relationship configuration successfully set up." return $true } elseif (($SourceTenantRelationshipTest.value -eq "GoodToProceed") -or ($TargetTenantRelationshipTest.value -ne "GoodToProceed")) { Write-Error -Message "ERROR: Tenant relationship configuration failed in either source or target tenant." -Category InvalidResult return $false } elseif (($SourceTenantRelationshipTest.value -ne "GoodToProceed") -and ($TargetTenantRelationshipTest.value -ne "GoodToProceed")) { Write-Error -Message "ERROR: Tenant relationship configuration failed in source and target tenant." -Category InvalidResult return $false } else { Write-Error -Message "ERROR: Tenant relationship configuration failed with unkonwn error." -Category NotSpecified return $false } } end { $ErrorActionPreference = $Preferences[0] $InformationPreference = $Preferences[1] } } |