Start-SPMigration

PowerShell-Skript fuer die Migration von SharePoint On-Premise Inhalten ueber das serverseitige Objektmodell.

Das Skript kann:

  • Dokumentbibliotheken exportieren
  • Dateien inklusive Metadaten exportieren
  • normale SharePoint-Listen und deren Eintraege exportieren
  • exportierte Inhalte wieder in ein Ziel-Web importieren
  • Feldwerte ueber eine Mapping-CSV von Quell- auf Ziel-InternalNames abbilden
  • Listen- und Bibliotheksnamen ueber manifest.csv auf Zielnamen abbilden

Voraussetzungen

  • SharePoint On-Premise Server
  • Ausfuehrung auf einem Server mit installiertem SharePoint PowerShell-Modul
  • Berechtigungen auf Quell- und Ziel-Web
  • PowerShell mit Zugriff auf SharePointServer

Das Skript laedt intern:

Import-Module SharePointServer

Dateien im Projekt

  • Start-SPMigration.ps1: Hauptskript fuer Export und optionalen Import
  • FieldMapping.sample.csv: Beispiel fuer das Feldmapping

Exportierte Struktur

Beim Export entsteht unter -OutputPath folgende Struktur:

OutputPath
|-- Files
|   |-- <Bibliothek>
|   |   |-- Unterordner
|   |   |   |-- Dokument.pdf
|   |   |   |-- Dokument.pdf.properties.json
|-- Lists
|   |-- ListeA.json
|-- manifest.csv

Dateien

  • Die Originaldatei wird in Files\<Bibliothek>\... gespeichert.
  • Die Metadaten liegen direkt daneben als Sidecar-Datei: Dateiname.ext.properties.json
  • manifest.csv enthaelt ausserdem Container-Eintraege fuer Listen und Dokumentbibliotheken

Listen

  • Pro Liste wird genau eine JSON-Datei unter Lists\ erzeugt.
  • Die Eintraege enthalten insbesondere:
    • ContentTypeId
    • FieldValues
    • FieldTextValues
    • Fields

Wichtige Metadaten

Fuer den Import sind vor allem diese Informationen relevant:

  • FieldValues
  • FieldTextValues
  • ContentTypeId
  • interne Feldnamen (InternalName)

Der Name des Inhaltstyps wird bewusst nicht als fuehrende Importinformation verwendet, da er sich im Zielsystem unterscheiden kann.

Mapping-CSV

Format:

SourceInternalName;TargetInternalName
DHS2016Persdat;Persdat
DHS2016Dienstgrad;Dienstgrad
DHS2016SecurityClearance;SecurityClearance

Bedeutung:

  • SourceInternalName: interner Feldname aus dem Export
  • TargetInternalName: interner Feldname im Zielsystem

manifest.csv fuer Listen- und Bibliotheksmapping

Beim Export wird fuer jede Liste und jede Dokumentbibliothek eine Container-Zeile in manifest.csv geschrieben.

Wichtige Spalten:

  • RecordType
  • ObjectType
  • SourceTitle
  • TargetTitle
  • BaseTemplate

Fuer das Mapping ist insbesondere TargetTitle gedacht:

  • leer: das Skript sucht im Ziel mit dem Quellnamen
  • gesetzt: das Skript sucht im Ziel mit dem Wert aus TargetTitle

Beispiel:

RecordType;ObjectType;SourceWebUrl;SourceTitle;TargetTitle;BaseType;BaseTemplate;RootFolderUrl;SourceServerRelativeUrl;FileName;FileUniqueId;FileLength;LocalFilePath;LocalMetadataPath;ExportedAtUtc
Container;DocumentLibrary;http://clshp001/;Documents;Dokumente;DocumentLibrary;101;/Documents;/Documents;;;;;;
Container;List;http://clshp001/;TestListe;ZielTestListe;GenericList;100;/Lists/TestListe;/Lists/TestListe;;;;;;

Wenn eine Ziel-Liste oder Ziel-Bibliothek nicht existiert, gibt das Skript eine Warnung aus, dass dieser Container manuell angelegt werden soll.

Parameter

Pflichtparameter

  • WebUrl: Quell-Web fuer den Export
  • OutputPath: Ausgabeordner fuer den Export

Exportparameter

  • IncludeHiddenLibraries: exportiert auch versteckte Bibliotheken
  • IncludeHiddenLists: exportiert auch versteckte Listen
  • ExportOnly: fuehrt nur den Export aus
  • ImportOnly: fuehrt nur den Import aus einem vorhandenen Exportordner aus

Importparameter

  • TargetWebUrl: Ziel-Web fuer den Import
  • MappingCsvPath: CSV fuer Feldmapping
  • ImportFiles: importiert nur Dateien/Bibliotheken
  • ImportLists: importiert nur Listen
  • OverwriteFiles: ueberschreibt vorhandene Dateien beim Import

Hinweis:

  • Wenn weder ImportFiles noch ImportLists gesetzt sind, werden beim Import beide Bereiche verarbeitet.
  • Wenn ExportOnly gesetzt ist, wird kein Import gestartet.
  • Wenn ImportOnly gesetzt ist, wird kein neuer Export gestartet.

Beispiele

Nur Export

.\Start-SPMigration.ps1 `
  -WebUrl "http://sharepoint/sites/Quelle" `
  -OutputPath "C:\Temp\SP-Export" `
  -ExportOnly

Export und danach Import

.\Start-SPMigration.ps1 `
  -WebUrl "http://sharepoint/sites/Quelle" `
  -OutputPath "C:\Temp\SP-Export" `
  -TargetWebUrl "http://sharepoint/sites/Ziel" `
  -MappingCsvPath ".\FieldMapping.sample.csv"

Export, manifest.csv anpassen, dann nur Import

.\Start-SPMigration.ps1 `
  -WebUrl "http://sharepoint/sites/Quelle" `
  -OutputPath "C:\Temp\SP-Export" `
  -ExportOnly

Danach manifest.csv bearbeiten und TargetTitle fuer Listen oder Bibliotheken setzen.

Anschliessend:

.\Start-SPMigration.ps1 `
  -OutputPath "C:\Temp\SP-Export" `
  -TargetWebUrl "http://sharepoint/sites/Ziel" `
  -MappingCsvPath ".\FieldMapping.sample.csv" `
  -ImportOnly

Nur Dateien importrelevant ausfuehren

.\Start-SPMigration.ps1 `
  -WebUrl "http://sharepoint/sites/Quelle" `
  -OutputPath "C:\Temp\SP-Export" `
  -TargetWebUrl "http://sharepoint/sites/Ziel" `
  -MappingCsvPath ".\FieldMapping.sample.csv" `
  -ImportFiles `
  -OverwriteFiles

Nur Listen importrelevant ausfuehren

.\Start-SPMigration.ps1 `
  -WebUrl "http://sharepoint/sites/Quelle" `
  -OutputPath "C:\Temp\SP-Export" `
  -TargetWebUrl "http://sharepoint/sites/Ziel" `
  -MappingCsvPath ".\FieldMapping.sample.csv" `
  -ImportLists

Aktuelles Verhalten beim Import

Dokumentbibliotheken

  • Dateien werden in die per manifest.csv aufgeloeste Zielbibliothek importiert.
  • Unterordner werden bei Bedarf angelegt.
  • Metadaten werden anschliessend ueber das CSV-Mapping gesetzt.

Listen

  • Listeneintraege werden neu angelegt.
  • Feldwerte werden ueber FieldValues und FieldTextValues gemappt.

Bekannte Einschraenkungen

  • Die Zielaufloesung kann ueber manifest.csv mit TargetTitle ueberschrieben werden.
  • Listenanhaenge werden derzeit noch nicht physisch mit importiert.
  • Ordner in normalen Listen werden beim Import derzeit uebersprungen.
  • Fehlende Ziellisten oder Zielbibliotheken werden derzeit nicht automatisch angelegt; das Skript gibt stattdessen eine Warnung zur manuellen Anlage aus.
  • Sehr spezielle Feldtypen koennen je nach Farm-Konfiguration zusaetzliche Anpassungen benoetigen.
  • Das Skript ist fuer SharePoint On-Premise mit serverseitigem Objektmodell gedacht, nicht fuer SharePoint Online.

Empfehlung

Zuerst immer mit -ExportOnly testen und die exportierten *.properties.json sowie die Listen-JSONs pruefen. Danach das Feldmapping vervollstaendigen und erst dann den kombinierten Export/Import gegen das Zielsystem laufen lassen.

Description
No description provided
Readme 172 KiB
Languages
PowerShell 100%