addes Import Functions and Readme.md

This commit is contained in:
2026-04-15 14:39:52 +02:00
parent 6cbe860731
commit fafbac3569
3 changed files with 1204 additions and 59 deletions

182
README.md Normal file
View File

@@ -0,0 +1,182 @@
# 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
## 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`
### 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
## 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
### 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.
## 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"
```
### 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 gleichnamige 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
- Zielbibliotheken und Ziellisten werden aktuell ueber den Titel aufgeloest.
- Listenanhaenge werden derzeit noch nicht physisch mit importiert.
- Ordner in normalen Listen werden beim Import derzeit uebersprungen.
- 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.