Active Directory : E-Mail Alias über Powershell setzen

Auslesen der vorhanden E-Mail Aliase eines Users. SamAccountName muss natürlich duch einen echten ersetzt werden :-)
Get-AdUser -Identity 'SamAccountName' -Properties ProxyAddresses | select Name -ExpandProperty ProxyAddresses
Setzen eines zusätzlichen E-Mail Alias. SamAccountName muss natürlich duch einen echten ersetzt werden :-)
Set-ADUser -Identity 'SamAccountName' -add @{ProxyAddresses="smtp:alias1@domain,smtp:alias2@domain" -split ","}

Exchange 2019 -> Exchange Online : Migration der kompletten Maildaten

Wir migrieren gerade mal wieder ein paar Server in Office 365, wir benutzen hierfür ein Tool von CodeTwo. Ich kann das nur jedem empfehlen der eine Schmerzfrei Migration haben möchte. Nachdem wir GSuite (IMAP) migiriert haben ist heute der Exchange dran. Hier hat die Software diesen Fehler geworfen.
The account does not have permission to impersonate the requested user
hmm ... klar wir hatten die Rolle nicht zugewiesen. Das kann man so erledigen. Ausführen in der Exchange Managment Shell
New-ManagementRoleAssignment -name:impersonationAssignmentName -Role:ApplicationImpersonation -User:UserForMigration
dann ist die Migration angelaufen.

Quelle:
https://docs.microsoft.com/en-us/exchange/client-developer/exchange-web-services/how-to-configure-impersonation

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.)

Exchange 2013/2016: Installationsanleitung für einen Exchange CU auf einen Single Server (kein DAG)

Hier meine Anleitung zur Installation eines Exchange CU auf einen einzelnen Exchange Server(kein DAG) - ist wahrscheinlich nicht vollständig, aber für mich steht hier das Wichtigste drin.

Vorher eventuelles Schema-Update prüfen und ggf. durchführen. Für ein sicheres Schema-Update habe ich auch bereits eine Anleitung geschrieben:
HTH: ActiveDirectory: Sicheres Schema-Update (ADPREP) mittels Replikations-Pause

Danach geht es mit den Vorbereitungen und Installation weiter:

- Benutzerspezifische Konfigurationsdateien sichern (z.B. Microsoft.Exchange.Store.Worker.exe.config)
- Backup-Zeiten prüfen und ggf. anhalten
- NAT für SMTP deaktivieren - Keine Mails kommen mehr herein, keine Client-Verbindungen mehr von extern
- HTTPS in NAT auf Firewall deaktivieren - Keine externen Client-Verbindungen mehr (nur wenn kein Reverse Proxy vorhanden)
- Reverse Proxy deaktivieren, falls vorhanden - kein OWA, ActiveSync und Outlook Anywhere
- Server herunterfahren und Snapshot erstellen (Sicherheit)
- Server neu starten - schließt auch alle eventuellen Installationsroutinen ab (Updates etc.)
- Virenscanner deaktivieren bei Installation (z.B. Defender: Set-MpPreference -DisableRealtimeMonitoring $true)
- Powershell Restriction deaktivieren: Set-ExecutionPolicy Unrestricted
- Server neu starten - zur Sicherheit
- AV-Status prüfen erneut prüfen: Get-Mppreference
- ISO mounten
- CMD als Administrator öffnen (Wichtig, wegen UAC)
- Setup aus CMD starten und erfolgreich durchlaufen lassen – kann dauern... (ca. 1 Stunde)
- Zuvor gesicherte, benutzerspezifische Konfigurationsdateien prüfen und ggf. wiederherstellen (Filedate prüfen)
- Serverneustart durchführen um Installation abzuschließen und wiederhergestellte Konfiguration zu aktivieren
- ReverseProxy bzw. HTTPS im NAT auf der Firewall wieder aktivieren
- NAT für SMTP wieder aktivieren - Testmail schicken!!
- Nach Update Funktionen prüfen: OWA, ActiveSync, Outlook Anywhere
- Backup ggf. wieder aktivieren
- Virenscanner aktivieren (z.B. Set-MpPreference -DisableRealtimeMonitoring $false)
- Snapshot löschen

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

Terminalserver/RDS 2016: Falscher Standarddrucker bei manchen Anwendungen

Problem:
Wir haben seit längerem das Problem, dass auf Terminalserver basierend auf Server 2016 der Standarddrucker nicht korrekt gesetzt wird. Das passiert aktuell inicht bei allen Anwendungen sondrn nur bei älteren Applikationen. Nach etwas Recherche hat sich herausgestellt, dass sich beim Server 2016 bzgl. des Standarddruckers in der Registry etwas geändert hat und einige ältere Applikationen den neuen Pfad nicht abfragen bzw. mit einer alten Routine hier den Standarddrucker ermitteln.

Ursache:
Früher war der Standarddrucker hier gesetzt:
HKCU\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows\Devices

Neu seit Server 2016 ist es dieser Pfad, der sich immer wieder ändert:
HKCU\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows\SessionDefaultDevices\S-1-5-5-0-xxxxxxxxx

Lösung:
Da wir die problematischen Anwendungen nicht selbst ändern konnten und der Hersteller das Problem nicht lösen wollte/konnte, mussten wir uns etwas einfallen lassen. Ich habe hierzu ein Skript gefunden, welches den Standarddrucker aus dem neuen Pfad ausliest und dann im alten Pfad setzt.
Folgendes habe ich dazu eingerichtet:

1.) Das Skirpt zum Auslesen und Setzen des Standarddruckers:
Option Explicit
 On Error Resume Next
 Const HKCU = &H80000001
 Dim strComputer, objReg, strOrigPath, strNewPath, arrKeys, strKey, strPrinter

strComputer = "."
 Set objReg = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & _ 
  strComputer & "\root\default:StdRegProv")
 strOrigPath = "Software\Microsoft\Windows NT\CurrentVersion\Windows\SessionDefaultDevices"
 strNewPath = "Software\Microsoft\Windows NT\CurrentVersion\Windows"

objReg.EnumKey HKCU, strOrigPath, arrKeys
 For Each strKey In arrKeys
     objReg.GetStringValue HKCU, strOrigPath & "\" & strKey, "Device", strPrinter
     If strPrinter <> vbNull Then
      objReg.SetStringValue HKCU, strNewPath, "Device", strPrinter
     End If
 Next

Set strComputer = Nothing
 Set objReg = Nothing
 Set strOrigPath = Nothing
 Set strNewPath = Nothing
 Set arrKeys = Nothing
 Set strKey = Nothing
 Set strPrinter = Nothing


Ich habe dann die Applikation über eine Batch-Datei starten lassen und darin das VBS zusätzlich laufen lassen:

REM Startskript für Applikation
start \\server\freigabe\anwendung.exe

REM Kurze Wartezeit um RDS-Session aufzubauen und Drucker zu mappen
ping 127.0.0.1 -n 10 > nul

REM Setzen des Default-Printers im Legacy Registrykey
start \\server\freigabe\set_printer.vbs


Quellen zur Lösung:
RemoteApp Default Printer Redirection Not Working in Server 2016
Default Printer not Mapped Properly within ICA Session
“Das einzig sichere System müsste ausgeschaltet, in einem versiegelten und von Stahlbeton ummantelten Raum und von bewaffneten Schutztruppen umstellt sein.”
Gene Spafford (Sicherheitsexperte)