6.8 KiB
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.csvauf 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 ImportFieldMapping.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.csventhaelt ausserdem Container-Eintraege fuer Listen und Dokumentbibliotheken
Listen
- Pro Liste wird genau eine JSON-Datei unter
Lists\erzeugt. - Die Eintraege enthalten insbesondere:
ContentTypeIdFieldValuesFieldTextValuesFields
Wichtige Metadaten
Fuer den Import sind vor allem diese Informationen relevant:
FieldValuesFieldTextValuesContentTypeId- 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 ExportTargetInternalName: 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:
RecordTypeObjectTypeSourceTitleTargetTitleBaseTemplate
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 ExportOutputPath: Ausgabeordner fuer den Export
Exportparameter
IncludeHiddenLibraries: exportiert auch versteckte BibliothekenIncludeHiddenLists: exportiert auch versteckte ListenExportOnly: fuehrt nur den Export ausImportOnly: fuehrt nur den Import aus einem vorhandenen Exportordner aus
Importparameter
TargetWebUrl: Ziel-Web fuer den ImportMappingCsvPath: CSV fuer FeldmappingImportFiles: importiert nur Dateien/BibliothekenImportLists: importiert nur ListenOverwriteFiles: ueberschreibt vorhandene Dateien beim Import
Hinweis:
- Wenn weder
ImportFilesnochImportListsgesetzt sind, werden beim Import beide Bereiche verarbeitet. - Wenn
ExportOnlygesetzt ist, wird kein Import gestartet. - Wenn
ImportOnlygesetzt 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.csvaufgeloeste Zielbibliothek importiert. - Unterordner werden bei Bedarf angelegt.
- Metadaten werden anschliessend ueber das CSV-Mapping gesetzt.
Listen
- Listeneintraege werden neu angelegt.
- Feldwerte werden ueber
FieldValuesundFieldTextValuesgemappt.
Bekannte Einschraenkungen
- Die Zielaufloesung kann ueber
manifest.csvmitTargetTitleueberschrieben 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.