Migration Sharepoint Fondation 2010 auf 2013 inkl. Content

Migration SharePoint Fondation 2010 -> 2013

--- SHAREPOINT 2010 READONLY MODE ---

Ich habe als ersten Schritt den alten Sharepoint 2010 in den ReadOnly-Modus versetzt, damit während der Datenmigration keiner mehr Änderungen durchführt, aber die Daten noch erreichbar sind.

- Öffnen der Zentraladministration
- Im Menü links "Anwendungsverwaltung" auswählen
- In der Übersicht rechts den Unterpunkt "Kontingente und Sperren konfigurieren" bei "Webseitensammlungen" auswählen
- Die gewünschte Webseitensammlung auswählen und den Punkt "Schreibgeschützt" setzen.
- Fertig, jetzt können keine Änderungen mehr vorgenommen werden und die Migration kann beginnen.

--- Prerequisite-Installer ---

Powershell-Installation der nötigen Serverkomponenten, da es sonst zu Fehlermeldungen kommt.
Import-Module ServerManager

Add-WindowsFeature NET-WCF-HTTP-Activation45,NET-WCF-TCP-Activation45,NET-WCF-Pipe-Activation45

Add-WindowsFeature Net-Framework-Features,Web-Server,Web-WebServer,Web-Common-Http,Web-Static-Content,Web-Default-Doc,Web-Dir-Browsing,Web-Http-Errors,Web-App-Dev,Web-Asp-Net,Web-Net-Ext,Web-ISAPI-Ext,Web-ISAPI-Filter,Web-Health,Web-Http-Logging,Web-Log-Libraries,Web-Request-Monitor,Web-Http-Tracing,Web-Security,Web-Basic-Auth,Web-Windows-Auth,Web-Filtering,Web-Digest-Auth,Web-Performance,Web-Stat-Compression,Web-Dyn-Compression,Web-Mgmt-Tools,Web-Mgmt-Console,Web-Mgmt-Compat,Web-Metabase,WAS,WAS-Process-Model,WAS-NET-Environment,WAS-Config-APIs,Web-Lgcy-Scripting,Windows-Identity-Foundation,Server-Media-Foundation,Xps-Viewer

Jetzt den Sharepoint Prerequisite-Installer starten und durchlaufen lassen:

• Microsoft .NET Framework 4.5: gleichwertige Produkte waren bereits installiert (es ist keine Aktion erfolgt).
• Windows Management Framework 3.0: gleichwertige Produkte waren bereits installiert (es ist keine Aktion erfolgt).
• Anwendungsserverrolle, Webserverrolle (IIS): erfolgreich konfiguriert.
• Systemeigener Client von Microsoft SQL Server 2008 R2 SP1: erfolgreich installiert.
• Microsoft Sync Framework Runtime v1.0 SP1 (x64): erfolgreich installiert.
• Windows Server AppFabric: erfolgreich installiert.
• Microsoft Identity-Erweiterungen: erfolgreich installiert.
• Microsoft Information Protection and Control-Client: erfolgreich installiert.
• Microsoft WCF Data Services 5.0: erfolgreich installiert.
• Microsoft WCF Data Services 5.6: erfolgreich installiert.
• Kumulatives Updatepaket 1 für Microsoft AppFabric 1.1 für Windows Server (KB2671763): erfolgreich installiert.

Reboot

--- SQL EXPRESS INSTALLATION ---

Instanzname : Server=localhost\SQLEXPRESS;Database=master;Trusted_Connection=True;
Version : 14.0.1000.169 (SQL Express 2017)

SQL SERVER MANAGEMENT STUDIO INSTALLATION
Pfad : C:\Program Files (x86)\Microsoft SQL Server Management Studio 18
.NET-Version : 4.7.2

--- SHAREPOINT INSTALLATION ---
Um die Installation erfolgreich durchführen zu können muss die Datei wsssetup.dll getauscht werden, da sonst die .NET-Version nicht erkannt wird, wenn diese höher als 4.5 ist. Dazu müssen wir die Installation entpacken und die Datei austauschen.
Quelle: Setup error if the .NET Framework 4.6 is installed
Zur Installation werden ein Farmadmin-Konto und ein Serviceadmin-Konto benötigt. Bitte brachten, dass diese zwei Konten nur die nötigen Rechte bekommen und kein Domänen-Admin sind.

- sharepoint.exe /extract:C:\SharePointInstaller
- Austausch der wsssetup.dll
- Install Sharepoint (Installationstyp: Vollständig)

--- Sharepoint-Wizard ---

Konfig-Database : \SQLEXPRESS
Konfig-DB-Name : SharePoint_Config
Farmadmin :
Passphrase : xxxxxxxxx
Admin-Center : http://Sservername>:18073/
Auth. Setting : NTLM
Dienst-Konto :

--- Datenmigration ---

- Backup alte Datenbank "WSS_Content" mittels SQL Studio
- Backup-Datei auf neuen Sharepoint kopieren
- Bestehende Sharepoint - 80 Webapplikation löschen (inkl. ISS und Content-Database – NICHT die Central Administration).
- Da die alte WSS-Content-Database mit „windows classic“ Auth daherkommt und die Applikationen aber mit „Claims“ Auth erstellt werden, gibt es Probleme bei der Migration. Somit muss die Sharepoint - 80 Webapplikation manuell über die Powershell erstellt werden:
New-SPWebApplication -Name "Sharepoint Site - 80" -ApplicationPool "SPAppPool" -AuthenticationMethod "Kerberos" -ApplicationPoolAccount (Get-SPManagedAccount "") -Port 80 -URL http://

- Sharepoint-Dienste heruntergefahren und die WSS-Content-Database aus der Sicherungsdatei wiederhergestellen
- Dienste wieder hochgefahren und mit dem nachfolgenden Test die Konfiguration überprüft:
Test-SPContentDatabase -Name WSS_Content –WebApplication http://

Vorsichtshalber noch mal Upgrade der Content-Database durchführen:
Get-SPContentDatabase | Upgrade-SPContentDatabase 

100.00% : SPContentDatabase Name=WSS_Content
Upgrade-SPContentDatabase : Das Upgrade wurde mit Fehlern abgeschlossen. Überprüfen Sie die Upgradeprotokolldatei
unter 'C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\15\LOGS\Upgrade-20190926-103708-855.log'.
Die Anzahl der Fehler und Warnungen ist am Ende der Updateprotokolldatei aufgeführt.
In Zeile:1 Zeichen:25
+ Get-SPContentDatabase | Upgrade-SPContentDatabase
+ ~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidData: (Microsoft.Share...ContentDatabase:SPCmdletUpgradeContentDatabase) [Upgrade
-SPContentDatabase], SPUpgradeException
+ FullyQualifiedErrorId : Microsoft.SharePoint.PowerShell.SPCmdletUpgradeContentDatabase


Hiermit noch das Upgrade alle anderen Sharepoint-Datenbanken durchführen um den obrige Fehlermeldung zu lösen
PSConfig.exe -cmd upgrade -inplace b2b -wait -cmd applicationcontent -install -cmd installfeatures -cmd secureresources -cmd services -install

Die Konfiguration der SharePoint-Produkte wurde erfolgreich abgeschlossen.

Gesamtanzahl der ausgeführten Konfigurationseinstellungen: 8
Gesamtanzahl der erfolgreichen Konfigurationseinstellungen: 8
Gesamtanzahl der erfolglosen Konfigurationseinstellungen: 0
Die Konfiguration der SharePoint-Produkte wurde erfolgreich beendet.
Die Konfiguration der SharePoint-Produkte war erfolgreich.

Eigentlich fertig! Bei mir war noch das Problem, dass sich kein Benutzer am Intranet anmelden konnte – ich bekam immer ein Fenster zur Eingabe der Anmeldedaten angezeigt. Das hat mir viele graue Haare gekostet, aber am Ende war die Lösung mal wieder logisch und in den Basics versteckt – IIS Authentifizierung!
Hier war Kerberos als Standard gesetzt und ich habe NTLM eingetragen und schon hat alles funktioniert!

- IIS-Manager öffnen
- Sharepoint-Website suchen und Authentifizierung öffnen
- Hier bei „Windows Authentifizierung“ die „Provider“ auswählen
- Hier nur NTLM setzen
- iisreset durchführen – läuft!

Quellen für Hilfestellungen:
Install SharePoint Foundation 2013 on Windows Server 2016 Solution
SharePoint: Common NTLM Authentication Issues, aka: Consider Ditching NTLM
Live Migration of SharePoint 2010 to SharePoint 2013
SQL Server: Einzelbenutzermodus ausschalten
Change SharePoint Site To Read Only

Exchange 2016: Fehler "Version mismatch was detected" beim Verschieben von Postfächern

Problem:
Ich habe bei der Migration von Exchange 2013 auf 2016 beim Versuch Postfächer zu verschieben folgende Fehlermeldung bekommen:
Ich konnte keine Postfächer auf den neuen Exchange 2016 verschieben

Lösung:
Das Problem ist, dass das Migration-Postfach erst auf den neuen 2016er verschoben werden muss und sich damit auch die Version anhebt. Erst dann ist eine Migration von anderen Postfächern möglich. Das Migrationspostfach ermitteln Sie mittels Powershell:
Get-Mailbox Migration* -Arbitration

Ich habe das Postfach dann einfach in die neue Datenbank auf dem Exchange 2016 verschoben:
Get-Mailbox Migration* -Arbitration | New-MoveRequest -TargetDatabase "Datenbankname"

Nach der erfolgreichen Migration kann man sich auch die Versionsnummer anzeigen lassen. Diese sollte nun nicht mehr 15.0 sondern 15.1 lauten:
Get-Mailbox Migration* -Arbitration | ft Name,AdminDisplayVersion

Jetzt kann man die anderen Postfächer problemlos migrieren.
Generell empfiehlt es sich die Systempostfächer zuerst umzuziehen. Um diese zu ermitteln habe ich auch ein Skript geschrieben: Microsoft Exchange: Ermittlung aller System-Postfächer (Monitoring, Arbitration etc.)

Microsoft Exchange: Ermittlung aller System-Postfächer (Monitoring, Arbitration etc.)

Wenn ich einen Exchange Server migriere und alle Postfächer verschoben habe, dann passiert es mir regelmäßig, dass ich eines der Systempostfächer "vergesse" zu moven und bekomme dann beim löschen der Postfach-Datenbank einen Fehler.
Hier mal alle Befehle um die entsprechenden Postfächer zu finden und ggf. zu migrieren.
WICHTIG: Das muss man PRO Postfach-Datenbank machen, da z.B. die Monitoring-Postfächer pro Datenbank erstellt werden!

Vorweg mal der Befehl um alle Postfach-Datenbanken mit Namen anzuzeigen:
Get-MailboxDatabase -Status | ft name, databasesize


Hier nun die Befehle um die System-Postfächer anzuzeigen:
Get-Mailbox -Database "Name Postfachdatenbank" -Monitoring
Get-Mailbox -Database "Name Postfachdatenbank" -AuditLog
Get-Mailbox -Database "Name Postfachdatenbank" -Arbitration
Get-Mailbox -Database "Name Postfachdatenbank" -Archive
Get-Mailbox -Database "Name Postfachdatenbank" -RemoteArchive
Get-Mailbox -Database "Name Postfachdatenbank" -PublicFolder
Get-Mailbox -Database "Name Postfachdatenbank" -AuxAuditLog
Get-Mailbox -Database "Name Postfachdatenbank" -GroupMailbox

Exchange 2013: Anleitung zur Migration der PublicFolder von Exchange 2007 nach Exchnage 2013

Problem:
Ablauf der PublicFolder-Migration von Exchange 2007 auf Exchange 2013

Lösung:
Hier stelle ich meine Skript-Sammlung und Ablauf-Prozedur für meine Migration da.
Ich habe hier meine öffentliche Ordner von einem Exchange 2007 auf einen Exchange 2013 CU16 erfolgreich migriert.
Dabei gibt es einige Ecken, die man wissen muss, sonst wunder man sich über das Verhalten und die Vorgehensweise.

Vorbereitung:
- Laden Sie sich die Public Folder Migration Scripts von Microsoft herunter (Link finden Sie unten bei den Quellen)
- Kopieren Sie die Skripte auf den alten und neuen Exchange-Server unter "C:\PFMigration\"
- Notieren Sie sich die FQDN des alten und neuen Exchange-Servers
- Sie benötigen einen Exchange-Administrator-Konto
- Alle Postfächer sind bereits auf dem Exchange 2013 migriert
- Es wird eine Downtime für die öffentlichen Ordner geben!
- Holen Sie sich eine Kanne Kaffee, das Szenario kann etwas dauern

Ablauf:

--- START AUF EXCHANGE 2007 ---

1.) Snapshot der "alten Public Folders"
Mit dem nachfolgendem Befehl wird ein Snapshot der PublicFolder-Struktur (Ordner, Struktur und Berechtigungen) angefertigt.
Get-PublicFolder -Recurse | Export-CliXML C:\PFMigration\Legacy_PFStructure.xml
Get-PublicFolderStatistics | Export-CliXML C:\PFMigration\Legacy_PFStatistics.xml
Get-PublicFolder -Recurse | Get-PublicFolderClientPermission | Select-Object Identity,User -ExpandProperty AccessRights | Export-CliXML C:\PFMigration\Legacy_PFPerms.xml


2.) Prüfen der Struktur

Mit diesem Befehl werden die Ordner-Namen nach "\" im Namen, da diese nicht migriert werden können und der Prozess hier dann abbricht. Vorher müssen alle entsprechenden Ordner in der alten Struktur umbenannt werden.
Get-PublicFolderDatabase | ForEach {Get-PublicFolderStatistics -Server $_.Server | Where {$_.Name -like "*\*"}}

WICHTIG: Falls es hier zu Änderungen kommt, muss ein erneuter Snapshot (Punkt 1) erstellt werden!

3.) Migrations-Prüfung
Hiermit prüfen Sie, ob bereits eine Migration läuft und noch nicht abgeschlossen ist.
Get-OrganizationConfig | Format-List PublicFoldersLockedforMigration, PublicFolderMigrationComplete

4.) CSV mit Ordernamen generieren
Hiermit wird eine CSV mit den Ordnernamen und Größen erstellt
.\Export-PublicFolderStatistics.ps1 PFStat.csv 

5.) PFStat.csv auf Exchange 2013 kopieren
Kopieren Sie die gerade erstellt PFStat.csv auf den Exchange 2013 in das Verzeichnis der Migrationsskripte "C:\PFMigration\"

--- WECHSEL AUF EXCHANGE 2013 ---

1.) Erstellen der nötigen PublicFolder.csv
Hier werden die Anzahl an PublicFolders berechnet und eine CSV für die Erstellung erzeugt.
.\PublicFolderToMailboxMapGenerator.ps1 10GB PFStat.csv FolderToMailbox.csv

2.) Umbenennen der PublicFolder-Mailbox (OPTIONAL)
In der gerade erstellten FolderToMailbox.csv heißt die neue PublicFolder-Mailbox Mailbox1, Mailbox2 etc.
WICHTIG: Man kann diese hier anpassen und muss aber dann auch die nachfolgenden Skripte ebenfalls anpassen!
Bitte beachten: Ich habe diese hier zu "PublicFolder01" umbenannte und meine Skripte daran angepasst.

3.) Neue PublicFolder-Datenbank erstellen
Hiermit wird die neue PublicFolder-Datenbank erstellt und für die Migration reserviert.
New-Mailbox -PublicFolder PublicFolder01 –HoldForMigration: $true

4.) Migration starten
Jetzt den Migrations-Prozess starten
New-PublicFolderMigrationRequest -SourceDatabase (Get-PublicFolderDatabase -Server ) -CSVData (Get-Content FolderToMailbox.csv -Encoding Byte)

5.) Migrationsstatus prüfen
Hiermit kann man den Migrationsstatus prüfen und eventuelle Fehler analysieren.
Minimale Ausgabe des Status:
Get-PublicFolderMigrationRequest | Get-PublicFolderMigrationRequestStatistics

Status-Ausgabe mit Details
Get-PublicFolderMigrationRequest | Get-PublicFolderMigrationRequestStatistics -IncludeReport | Format-List


ACHTUNG - WICHTIG: MIGRATION LÄUFT NUR BIS 95% UND STOPPT DANN - DAS IST GEWOLLT!
Solange der Parameter PreventCompletion = true ist, wird die Migration nicht vollständig abschließen

ACHTUNG - AB JETZT GIB ES DOWNTIME DER PUBLIC FOLDERS!
NACH DEM NACHFOLGENDEM SCHRITT GIBT ES KEIN ZUGRIFF MEHR AUF LEGACY PUBLIC FOLDER!


6.) Alte Public Folders sperren für endgültige Migration
Mit dem nachfolgendem Befehl werden die alten öffentlichen Ordner für den Zugriff und die endgültige Migration gesperrt.
Set-OrganizationConfig -PublicFoldersLockedForMigration:$true


7.) Freigabe für finale Migration (letzten 5% der Migration)
Set-PublicFolderMigrationRequest -Identity \PublicFolderMigration -PreventCompletion:$false 


8.) Migration wieder starten
Hiermit wird die zuvor gestoppte Migration wieder gestartet um die letzten 5% abzuschließen.
Resume-PublicFolderMigrationRequest -Identity \PublicFolderMigration


9.) Prüfen des Migrationsstatus mit Details
Nun müssen Sie die finale Migration überwachen:
Get-PublicFolderMigrationRequest | Get-PublicFolderMigrationRequestStatistics -IncludeReport | Format-List

Sollte die Migration nicht abschließen, dann prüfen Sie die Fehlermeldungen in der Detailausgabe. Wenn hier etwas mit „StalledDueToMailboxLock“ oder „Relinquishing job because the mailbox is locked“ zu lesen ist, dann müssen Sie den Informationstore auf dem alten Exchange 2007 einfach durchstarten. Danach können Sie die Migration erneut starten mittels:
Resume-PublicFolderMigrationRequest -Identity \PublicFolderMigration

Nun sollte alles bis 100% durchlaufen!

10.) Zugriff mit einzelnem Benutzer testen
Um den Zugriff zu testen und nicht gleich alle Benutzer umzustellen verwenden Sie den nachfolgenden Befehl:
Set-Mailbox -Identity TESTUSER -DefaultPublicFolderMailbox mailbox1


11.) Finaler Abschluß der Migration
Erst geben wir den neuen Public Folder für alle frei
Get-Mailbox -PublicFolder | Set-Mailbox -PublicFolder -IsExcludedFromServingHierarchy $false 

Nun schließen wir noch die Migrationsbatch ab
Set-OrganizationConfig -PublicFolderMigrationComplete:$true

Jetzt setzen wir den neuen Public Folder für ALLE Postfächer
Set-OrganizationConfig -PublicFoldersEnabled Local


12.) Prüfen der Migration
Nun prüfen wir noch, ob die Migrationsbatch auch als abgeschlossen angezeigt wird
Get-OrganizationConfig | FL PublicFolderMigrationComplete

Außerdem prüfen wir noch, ob der Public Folder für andere Benutzer als Default angezeigt wird
Get-Mailbox SOMERANDOMUSER | FL DefaultPublicFolderMailbox


13.) Aufräumarbeiten
Jetzt müssen wir noch den RemotePublicFolder-Eintrag wieder löschen
Set-OrganizationConfig -RemotePublicFolderMailboxes $null

Set-OrganizationConfig -PublicFoldersEnabled Local


14.) Clients testen
Nun ist es Zeit die Clients zu testen. Das kann etwas dauern, bis die neuen PublicFolders angezeigt werden - AD-Replikation!
Bei mir hat es teilweise bis zu 30 Minuten gedauert, bis auch die letzten Clients die öffentlichen Ordner angezeigt bekommen haben!

LETZTER HINWEIS: Sollte der Benutzer öffentliche Ordner als Favoriten eingetragen haben, dann muss er diese wieder neu setzen...leider!

Quellen:
ENOW: Legacy Public Folder Migration – Notes from the Field
MSExchangeGuru.com: Public Folders Migration from Exchange 2007/2010 to Exchange 2013
Microsoft: Download Public Folders Migration Scripts
“Das einzig sichere System müsste ausgeschaltet, in einem versiegelten und von Stahlbeton ummantelten Raum und von bewaffneten Schutztruppen umstellt sein.”
Gene Spafford (Sicherheitsexperte)