236 lines
6.8 KiB
Markdown
236 lines
6.8 KiB
Markdown
# 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:
|
|
|
|
```powershell
|
|
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:
|
|
|
|
```text
|
|
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:
|
|
|
|
```csv
|
|
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:
|
|
|
|
```csv
|
|
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
|
|
|
|
```powershell
|
|
.\Start-SPMigration.ps1 `
|
|
-WebUrl "http://sharepoint/sites/Quelle" `
|
|
-OutputPath "C:\Temp\SP-Export" `
|
|
-ExportOnly
|
|
```
|
|
|
|
### Export und danach Import
|
|
|
|
```powershell
|
|
.\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
|
|
|
|
```powershell
|
|
.\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:
|
|
|
|
```powershell
|
|
.\Start-SPMigration.ps1 `
|
|
-OutputPath "C:\Temp\SP-Export" `
|
|
-TargetWebUrl "http://sharepoint/sites/Ziel" `
|
|
-MappingCsvPath ".\FieldMapping.sample.csv" `
|
|
-ImportOnly
|
|
```
|
|
|
|
### Nur Dateien importrelevant ausfuehren
|
|
|
|
```powershell
|
|
.\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
|
|
|
|
```powershell
|
|
.\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.
|