Office 365 Migration per PowerShell

Seit ein paar Monaten gibt es eine neue PowerShell Version, die es ermöglicht von Dateisysteme und SharePoint Bibliotheken nach SharePoint Online zu migrieren. Ich habe mir das genauer angesehen und stelle in diesem Artikel meine Erkenntnisse vor. Als aller erstes muss man sagen, es ist überhaupt die erste Möglichkeit OOTB nach SharePoint Online zu migrieren. Dabei können als Quelle bisher ein klassisches Fileshare oder SharePoint On-Premises verwendet werden. Microsoft hat zur Ignite im Mai 2015 die neue API angekündigt . Die Slides dazu gibt es auf Channel 9: http://channel9.msdn.com/Events/Ignite/2015/BRK3153

Was ist dabei zu beachten?

Die API bietet eine aber eher rudimentäre Möglichkeit Daten zu migrieren. Für Fileshares reicht das meist noch, dennoch muss man folgendes beachten:

  • Pfadlängen dürfen 255 Zeichen nicht überschreiten (im Ziel volle URL: https://meintenant.sharepoint.com/Sites/Marketing/Präsentation/Bibliothek ist gültig
  • Sonderzeichen wie & ? € sind nicht unterstützt
  • Dateien die gerade exklusiv von einer anderen Applikation gesperrt sind

Bei SharePoint sieht es da schon komplexer aus, denn zusätzlich zu den Limitationen zu Fileshares noch Beschränkung en der Export API dazu

  • Bei großen Bibliotheken und Datenvolumen größer 15 GB
  • Generell jegliche Art von Anpassungen wie,
  • Full Trust Solutions
  • Templates

Voraussetzungen

Damit es losgehen kann benötigen Sie folgendes:

  • Office 365 Mandant inkl. Admin Rechte
  • Windows Azure Storage account
  • Office 365 PowerShell unter PowerShell.office.com
  • Azure Storage Explorer
  • Quelle Fileshare oder SharePoint 2013/2016 inkl. Admin Zugriff resp. Farm Administrator

Funktionsweise

Stichwort High Speed Migration

Grob:

  1. Erzeugen eines Migrations-Paketes bzw. SharePoint Export
  2. Konvertierung und Anpassung an die Ziel URL, ggf User Mapping
  3. Upload des Paketes (Metadaten inkl. Der Daten) auf Windows Azure
  4. Start der Migration, das migrieren direkt von Azure nach Office 365 ohne Throttling
  5. Überwachung der Queue und Auswertung / QA

Welches Rechenzentrum?

Gerade für uns in Europa stellt sich die Frage welches Rechenzentrum ich verwenden muss für muss für meinen Azure Storage Account – West Europe oder North EU? Folgendes Szenario, wenn ich bei der Registrierung meines Tenants Deutschland auswähle, wird dieser in Dublin oder in Amsterdam erstellt. Jetzt könnte man ja meinen, dass es sinnvoll ist den Azure Account in das gleiche Rechenzentrum zu legen wie O365, damit die Migration schnell geht. O365 verteilt z.B. Einzelne Mailboxen auch auf beide Rechenzentren, da gäbe es noch ne Möglichkeit das über PowerShell über den Mailbox Server herauszufinden – bei SharePoint nicht. Es ist nicht ersichtlich, die gute Nachricht, es ist auch völlig egal. Microsoft hat Hochgeschwindigkeitsverbindungen zwischen den Standorten. Also im Azure Storage Account kann einfach beides verwendet werden.

Ablauf

1. Migration Package erstellen

Als aller erstes wird ein sog. Migration Package erstellt. Das beinhaltet für die Quelle:  Fileshare: Metadaten wie Änderungsdatum der einzelnen Datein, wohin migrieren werden soll, Brechtigungen… Die eigentliche Payload, sprich die Dokumente befinden sich weiterhin im Share.

001
002
003
004
005
006
007
008
009
010

$sourcefilepath =   “v-sp-2013Demodata”
$packageoutputpath = “v-sp-2013MigrationPackage”
$packageoutputpathout = “v-sp-2013MigrationOutputPackage”
$targetweburl = “https://tenant.sharepoint.com/sites/Dennis”
$targetdoclib = “Live”
$targetsubfolder = “Office365Konferenz”
Import-Module Microsoft.Online.SharePoint.PowerShell -ErrorAction SilentlyContinue

$pkg = New-SPOMigrationPackage -SourceFilesPath $sourcefilepath -OutputPackagePath $packageoutputpath -TargetWebUrl $targetweburl -TargetDocumentLibraryPath $targetdoclib -TargetDocumentLibrarySubFolderPath $targetsubfolder –NoADLookup

  SharePoint : Metadaten inkl. Payload, da hier per Export-SpWeb sowohl Metadaten und Inhalte exportiert werden. Als Quelle können nur Listen und Bibliotheken (keine Sites) migrieren werden. Es muss daher genügend freier Speicherplatz verfügbar sein.

001
002
003
004
005
006
007
008
009
010
011
012
013
Add-PSSnapin Microsoft.SharePoint.PowerShell
  $spsourcefilepath =   “v-sp-2013MigrationExportSPExport”
$sppackageoutputpath = “v-sp-2013MigrationSPPackage”
$sppackageoutputpathout = “v-sp-2013MigrationSPOutputPackage”
$sptargetweburl = “https://tenant.sharepoint.com/sites/Dennis/Office365Konf/”
$sptargetdoclib = “Freigegebene%20Dokumente”
#$sptargetsubfolder = “Office365Konferenz”
  $spfilecontainername = “sppayload”
  $sppackagecontainername = “spmigrationpackage”
  $spazurequeuename = “spspomigration”
  $spazureaccountname = “azureaccountname”
  $spazurestoragekey =”azureaccountkey==”
Export-spweb -Identity “http://v-sp-2013/sites/1_Marketing/Office365Konf” -Path v-sp-2013MigrationExportSPExport -NoFileCompression -ItemUrl “Shared%20Documents”

 

2. Migration Package konvertieren

In beiden Fällen erfolgt eine Konvertierung in ein Azure / High Speed Migration gerechtes Format per Convert-SPOmigration In diesem Schritt werden die im zuvor erstellten Metadaten konvertiert und an das Ziel angepasst. Daher verbindet man sich in diesem Schritt auf Office 365 und alle Sites und Listen / Bibliotheken müssen bereits vorher erstellt sein, sonst kommt es zum Fehler. Filesystem

001
002
003
  $creds = Get-Credential “admin@tenant.onmicrosoft.com” 
    
  $tpkg = ConvertTo-SPOMigrationTargetedPackage -SourceFilesPath $sourcefilepath -SourcePackagePath $packageoutputpath -OutputPackagePath $packageoutputpathout -TargetWebUrl $targetweburl -TargetDocumentLibraryPath $targetdoclib -TargetDocumentLibrarySubFolderPath $targetsubfolder -Credentials $creds

SharePoint:

001
002
003
004
005
006
007
008
  $spcreds = Get-Credential “admin@tenant.onmicrosoft.com” 

Import-Module Microsoft.Online.SharePoint.PowerShell -ErrorAction SilentlyContinue

  Connect-SPOService -Credential $spcreds -Url https://tenant-admin.sharepoint.com
  $sptpkg = ConvertTo-SPOMigrationTargetedPackage -SourceFilesPath $spsourcefilepath -SourcePackagePath $spsourcefilepath -OutputPackagePath $sppackageoutputpath -TargetWebUrl $sptargetweburl -TargetDocumentLibraryPath $sptargetdoclib

 

3. Upload nach Azure 

Anschließend erfolgt der Upload nach Azure, das ist der Teil der am Längsten dauert. Der einzig begrenzende Faktor ist Bandbreite und IOPS im Backend, d.h. Wenn die Bandbreite nicht voll ausgeschöpft werden kann, wird auf der Azure Seite gedrosselt oder die IOPS des Azure Accounts sind erreicht. Filesystem:

001
002
003
004
005
006
  $filecontainername = “payload”
  $packagecontainername = “migrationpackage”
  $azurequeuename = “spomigration”
  $azureaccountname = “azureaccountname”
  $azurestoragekey =”azurestorageaccountkey==”
  $uploadresult = Set-SPOMigrationPackageAzureSource –SourceFilesPath $sourcefilepath –SourcepackagePath $packageoutputpathout –FileContainerName $filecontainername –PackageContainerName $packagecontainername –AzureQueueName $azurequeuename –AccountName $azureaccountname -AccountKey $azurestoragekey

SharePoint:

001
002
003
004
005
006
007
  $spfilecontainername = “sppayload”
  $sppackagecontainername = “spmigrationpackage”
  $spazurequeuename = “spspomigration”
  $spazureaccountname = “azureaccountname”
  $spazurestoragekey =”azureaccountkey==”
  $spuploadresult = Set-SPOMigrationPackageAzureSource –SourceFilesPath $spsourcefilepath –SourcepackagePath $sppackageoutputpath –FileContainerName $spfilecontainername –PackageContainerName $sppackagecontainername –AccountName $spazureaccountname -AccountKey $spazurestoragekey –AzureQueueName $spazurequeuename 

  Das sieht dann wie folgt aus, wichtig dabei ist, dass Payload und Metadaten getrennt sind (vor allem bei SharePoint) – sonst kann man gleich von vorn beginnen. Metadaten SharePoint nach dem Upload:

Payload SharePoint nach dem Upload:

 4. Migration starten

Anschließend wird die Migration gestartet. Dabei ist es so dass diese nicht sofort erfolgt, sondern sieht wird in eine Wartschlange in Azure gesetzt, der PowerShell Befehl ist also umgehend abgeschlossen, aber Daten habe ich deshalb noch keine in SharePoint. Filesystem:

001
$jobresult = Submit-SPOMigrationJob –TargetwebUrl $targetweburl –MigrationPackageAzureLocations $uploadresult –Credentials $creds

SharePoint:

001
$spjobresult = Submit-SPOMigrationJob -TargetWebUrl $sptargetweburl -MigrationPackageAzureLocations $spuploadresult

 

5. Reporting

Um dies zu überwachen kann man sich die Warteschlange und den Status dazu ansehen. Das geht am einfachsten per Storage Explorer.
Meldet wie Warteschlange jobendet, können wir uns die SharePoint Seite ansehen und das Ergebnis überprüfen:

azure_queue

  Final natürlich das Ergebnis in SharePoint:

 

Zusammenfassung

Die neue PowerShell API steht ab sofort allen Benutzern zur Verfügung. Für den Windows Azure Storage fallen Kosten an, das beginnt ab 2,02€ pro 100 GB und wird nur solange benötigt, bis die Migration abgeschlossen ist, anschließend, kann der temporäre Speicher wieder freigeben werden und es fallen keine Kosten mehr an.

Referenz

0 0 votes
Article Rating
Teilen

Autor: Dennis Hobmaier

Dennis Hobmaier ist Strategic Consultant bei AvePoint Deutschland GmbH. Er hat über 15 Jahre Erfahrung in IT-Enterprise Umgebung aller Größenordnungen und bedient Kunden aus den unterschiedlichsten Branchen. Als MCSE SharePoint hat er tiefgreifende Kenntnisse in den Bereichen Microsoft Active Directory, Windows, Azure, SharePoint und Office 365. Gerne teilt er seine Projekterfahrung mit Ihnen.

Subscribe
Notify of
guest

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahren Sie mehr darüber, wie Ihre Kommentardaten verarbeitet werden .

0 Comments
Inline Feedbacks
View all comments