# 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 | |-- | | |-- Unterordner | | | |-- Dokument.pdf | | | |-- Dokument.pdf.properties.json |-- Lists | |-- ListeA.json |-- manifest.csv ``` ### Dateien - Die Originaldatei wird in `Files\\...` 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.