Last active
August 29, 2015 14:20
-
-
Save kliemohn/6881ddbafaacf8552f1b to your computer and use it in GitHub Desktop.
Copies sites from one SharePoint environment to another using DocAve 6 accessing the SharePoint environments remotely. Sets up the DocAve site groups, plans, and executes the plans as jobs.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Import-Module DocAveModule | |
function CreateCopyPlan($planName, $planDescription, $srcSitesGroupName, $destSitesGroupName, $srcSiteUrl, $destSiteUrl) | |
{ | |
Write-Host "Creating copy plan $($planName)..." | |
$plan = Get-DAContentManagerBlankOnlinePlan | |
$plan.Name = $planName | |
$plan.Description = $planDescription | |
$plan.Action = "Merge" | |
$plan.SetPlanType("Copy") | |
# Setup source | |
$plan.SourceSPSitesGroupName = $srcSitesGroupName | |
$srcSiteCollection = New-Object DocAve.API.Objects.SharePointOnlineSite($plan.SourceSPSitesGroupName, $srcSiteUrl) | |
$plan.SourceTree.IncludeSPOnlineObject($srcSiteCollection) | |
# Setup destination | |
$plan.DestinationSPSitesGroupName = $destSitesGroupName | |
$destSiteCollection = New-Object DocAve.API.Objects.SharePointOnlineSite($plan.DestinationSPSitesGroupName, $destSiteUrl) | |
$plan.DestinationTree.SelectSPOnlineObject($destSiteCollection) | |
$plan.IncludeWorkflowDefinition = $true | |
$plan.ConflictResolution = [DocAve.API.Administration.ContentManager.ContentManagerConflictResolutionType]::ConflictResolutionOption10 | |
$plan.AppsConflictResolution = [DocAve.API.Administration.ContentManager.ContentManagerAppsConflictResolutionType]::ReplaceAppAndAppData | |
$plan.NotificationName = "Kirk" # Ideally we create the notification via script as well | |
New-DAContentManagerOnlinePlan -Plan $plan | |
Write-Host "Done" | |
} | |
function CreateSPSitesGroup($name, $description, $siteUrls, $username, $securePassword) | |
{ | |
$group = Get-DABlankSPOnlineSitesGroup | |
$group.Name = $name | |
$group.Description = $description | |
$group.AgentGroupName = "DEFAULT_SHAREPOINT_SITES_AGENT_GROUP" | |
$group.GroupType = "SharePointSitesGroup" | |
New-DASPOnlineSitesGroup -SitesGroup $group | |
$group = Get-DASPOnlineSitesGroup $name # not sure this is needed | |
foreach ($siteUrl in $siteUrls) | |
{ | |
$site = $group.GetBlankSiteCollectionConfiguration() | |
$site.SetCredential($username, $securePassword) | |
$site.Url = $siteUrl | |
# Note: this will fail if the site collection is already in another group | |
$group.AddSiteCollection($site) | |
} | |
} | |
# | |
# Main | |
# | |
# Get Credentials | |
$srcSiteUsername = Read-Host -Prompt "Enter source site username" | |
$srcSitePasswordSecure = Read-Host -Prompt "Enter source site password" -AsSecureString | |
$destSiteUsername = Read-Host -Prompt "Enter destination site username" | |
$destSitePasswordSecure = Read-Host -Prompt "Enter destination site password" -AsSecureString | |
# In the future, the source and destination site collection URLs will be loaded from a file | |
$srcSiteUrls = @("https://srctenant.sharepoint.com/sites/dev_kliemohn", "https://srctenant.sharepoint.com/sites/dev_kliemohn2") | |
$destSiteUrls = @("https://desttenant.sharepoint.com/sites/dev_kliemohn1", "https://desttenant.sharepoint.com/sites/dev_kliemohn2") | |
Login-DAManager -ControlHost localhost -ControlPort 14000 -Username "admin" -PlainTextPassword "admin" | |
# Great the source and destination site groups | |
# This could be done just once and cover all site collections (does not need to be done once per batch, but could be) | |
$srcSitesGroupName = "SCRIPT Source Sites" | |
$destSitesGroupName = "SCRIPT Destination Sites" | |
CreateSPSitesGroup $srcSitesGroupName "Source sites for copy. Created using PowerShell." $srcSiteUrls $srcSiteUsername $srcSitePasswordSecure | |
CreateSPSitesGroup $destSitesGroupName "Destination sites for copy. Created using PowerShell." $destSiteUrls $destSiteUsername $destSitePasswordSecure | |
# Create the copy plans - there is one of these per site collection | |
# These can be put into plan groups (at least through the UI this is possible - hwe have not tried to do this via PowerShell) | |
$plan1 = "Script Test dev_kliemohn" | |
CreateCopyPlan $plan1 "Plan 1 Test" $srcSitesGroupName $destSitesGroupName $srcSiteUrls[0] $destSiteUrls[0] | |
$plan2 = "Script Test dev_kliemohn2" | |
CreateCopyPlan $plan2 "Plan 2 Test" $srcSitesGroupName $destSitesGroupName $srcSiteUrls[1] $destSiteUrls[1] | |
$plan1job = Run-DAContentManagerCopyJob -PlanName $plan1 | |
$plan2job = Run-DAContentManagerCopyJob -PlanName $plan2 | |
# At this point we can store the $plan1job.ID and $plan2job.ID and then use "Get-DAJob -ID <id>" and look at its progress and status | |
# We can also call Get-DAJobDetail, Get-DAJobSetting, GET-DAJobSummary, Download-DAJobReport, and Set-DAJobStopped | |
# We can also call Get-DAContentManagerJobConfigurationDetail and Get-DAContentManagerJobSecurityDetail | |
Logout-DAManager | |
Write-Host "DONE" |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment