Tool zur Verwaltung von ProxyMailAddresses für Microsoft 365 ADSync
Entwickelt von Andreas Hepp | www.phinit.de | 08.12.2025
- Übersicht
- Features
- Screenshots
- Installation
- Verwendung
- MS365 ADSync Validierung
- Logging
- EXE-Konvertierung
- Systemanforderungen
- Bekannte Einschränkungen
- Troubleshooting
- Changelog
- Lizenz
- Autor
easyEXCH ProxyAddress Manager ist ein PowerShell-basiertes Tool mit moderner WPF-GUI zur Verwaltung von ProxyMailAddresses in Active Directory. Es wurde speziell für Umgebungen entwickelt, in denen kein lokaler Exchange Server mehr vorhanden ist, aber MS365 ADSync verwendet wird.
- ✅ Moderne WPF-GUI - Benutzerfreundliche Oberfläche im easyEXCH-Design
- ✅ Mehrsprachig - Deutsch und Englisch mit Live-Umschaltung (🌐 DE/EN)
- ✅ Live-Suche - Automatische Suche ab 3 Zeichen
- ✅ MS365-Validierung - Prüft ProxyAddresses auf ADSync-Kompatibilität
- ✅ Vollständiges Logging - Alle Änderungen werden protokolliert (Haupt-Log + Debug-Log)
- ✅ Export & History - CSV-Export und Änderungsverlauf pro Benutzer
- ✅ Statistik-Dashboard - Detaillierte Übersicht über alle Benutzer und ProxyAddresses
- ✅ Filter-Funktion - Benutzer nach Kompatibilität filtern
- ✅ EXE-Konvertierung - PS2EXE-kompatibel für einfache Verteilung
- ✅ Legacy Exchange Support - Berücksichtigt alte Exchange-Attribute
- Alle Benutzer laden - Lädt alle aktiven AD-Benutzer
- Intelligente Suche - Sucht in Vorname, Nachname, DisplayName, E-Mail, SAM-Account und UPN
- Live-Suche - Automatische Suche ab 3 Zeichen mit 500ms Verzögerung
- Tabellarische Darstellung - Übersichtliche Anzeige mit Vorname, Nachname, DisplayName und primärer E-Mail
- Filter-Funktion - Benutzer nach Kompatibilität filtern (Alle, Kompatible, Warnungen, Fehler)
- Export-Funktion - Alle ProxyAddresses als CSV exportieren
- History-Funktion - Änderungsverlauf pro Benutzer anzeigen
- Statistik-Dashboard - Übersicht über alle geladenen Benutzer und ProxyAddresses
- Dialog zur Eingabe neuer ProxyAddresses
- Typ-Auswahl: SMTP: (primär), smtp: (sekundär), SIP:, X500:
- Automatische Konvertierung alter primärer Adressen zu sekundären
- Bestehende ProxyAddresses ändern
- Atomare Operation: Alte löschen, neue hinzufügen
- Automatisches Rollback bei Fehlern
- Löschen mit Sicherheitsabfrage
- Warnung bei primären SMTP-Adressen
- Sekundäre SMTP-Adressen zu primären machen
- Automatische Konvertierung der alten primären zu sekundär
- Aktualisierung des Mail-Attributs
- Lädt aktuelle ProxyAddresses vom AD neu
- Automatische Validierung bei Auswahl
- Anzeige von Fehlern und Warnungen
- Farbcodierte Status-Anzeige (✅ Grün = OK, ❌ Rot = Fehler)
- ADSync-Prüfung für alle geladenen Benutzer
- Detailliertes Ergebnis-Fenster mit:
- Zusammenfassung (Kompatibel/Fehler/Warnungen)
- Tabelle mit allen Benutzern
- Auflistung aller Fehler und Warnungen
✅ Geprüft wird:
- Vorhandensein von ProxyAddresses
- Primäre SMTP-Adresse vorhanden (SMTP: Großbuchstaben)
- Keine mehrfachen primären SMTP-Adressen
- Mail-Attribut stimmt mit primärer SMTP überein
- E-Mail-Format (RFC-konform)
- Unerlaubte Zeichen
- Länge (max. 254 Zeichen)
- Legacy Exchange Attribute (msExchRecipientTypeDetails, legacyExchangeDN)
- MailNickname vorhanden
- TargetAddress für Remote Mailboxes
- Erkennt alte Exchange-Attribute
- Prüft X500-Adressen für Migration
- Warnt bei fehlenden Legacy-Konvertierungen
┌──────────────────────────────────────────────────────────────────────────┐
│ easyEXCH ProxyAddress Manager 🌐 [DE] [EN] │
│ Verwaltung von ProxyMailAddresses für MS365 ADSync │
├──────────────────────────────────────────────────────────────────────────┤
│ │
│ ProxyAddress Management │ Benutzer suchen │
│ ┌────────────────────────────┐ │ ┌──────────────────────────────┐ │
│ │ Max Mustermann │ │ │ Suchbegriff: [________] 🔍 │ │
│ │ [email protected] │ │ │ │ │
│ │ mmustermann │ │ │ 👥 Alle laden │ 🔍 ADSync │ │
│ │ ✅ MS365 Kompatibel │ │ │ 5 Benutzer geladen │ │
│ ├────────────────────────────┤ │ ├──────────────────────────────┤ │
│ │ Typ │ Adresse │ Primär │ │ │ Filter: [� Alle anzeigen ▼] │ │
│ │ SMTP│max@do...│ Ja │ │ │ 📤 Export │📜 History │📊 │ │
│ │ smtp│max@ol...│ Nein │ │ ├──────────────────────────────┤ │
│ │ X500│/o=Exc...│ Nein │ │ │ Vorname │ Nachname │ Email │ │
│ └────────────────────────────┘ │ │ Max │ Mustermann│ max@.. │ │
│ [➕ Hinzufügen][✏️ Bearbeiten] │ │ Erika │ Musterfrau│ erika@.│ │
│ [🗑️ Löschen][⭐ Als Primär] │ └──────────────────────────────┘ │
│ [🔄 Aktualisieren] │ │
└──────────────────────────────────────────────────────────────────────────┘
│ Bereit Version 1.0.0 | PhinIT.DE │
└──────────────────────────────────────────────────────────────────────────┘
- Windows 10/11 oder Windows Server 2016+
- PowerShell 5.1
- Active Directory PowerShell Module
- Berechtigungen zum Ändern von AD-Benutzern
-
Repository klonen:
git clone https://github.com/IhrUsername/easyEXCH-ProxyAddress.git cd easyEXCH-ProxyAddress
-
Script ausführen:
.\easyEXCH-PMA_V1.0.0.ps1
-
Optional: Als EXE kompilieren (siehe EXE-Konvertierung)
-
Alle Benutzer laden:
- Klick auf "👥 Alle Benutzer laden"
- Optional: Domain Controller oder OU-Filter angeben
-
Gezielt suchen:
- Mindestens 3 Zeichen eingeben
- Automatische Live-Suche nach 500ms
- Sucht in: Vorname, Nachname, DisplayName, E-Mail, SAM-Account, UPN
-
Benutzer auswählen:
- Klick auf Benutzer in der Tabelle
- ProxyAddresses werden automatisch geladen
- Validierung wird durchgeführt
- Benutzer auswählen
- Klick auf ➕ Button
- Typ auswählen (SMTP:, smtp:, SIP:, X500:)
- Adresse eingeben (z.B.
[email protected]) - Klick auf "Hinzufügen"
Tipp:
SMTP:(Großbuchstaben) = Primäre Adressesmtp:(Kleinbuchstaben) = Sekundäre Adresse
- Benutzer auswählen
- ProxyAddress in der Liste auswählen
- Klick auf ✏️ Button
- Neue Adresse eingeben (mit Typ, z.B.
smtp:[email protected]) - Klick auf "Speichern"
- Benutzer auswählen
- ProxyAddress in der Liste auswählen
- Klick auf 🗑️ Button
- Bestätigen
- Benutzer auswählen
- Sekundäre SMTP-Adresse auswählen (smtp:)
- Klick auf ⭐ Button
- Bestätigen
Automatisch:
- Alte primäre wird zu sekundärer (SMTP: → smtp:)
- Ausgewählte wird zu primärer (smtp: → SMTP:)
- Mail-Attribut wird aktualisiert
- Benutzer laden (alle oder suchen)
- Klick auf 🔍 ADSync prüfen
- Ergebnis-Fenster wird angezeigt mit:
- Zusammenfassung
- Detaillierte Tabelle
- Alle Fehler und Warnungen
- Benutzer laden
- Filter-Dropdown auswählen:
- 🔍 Alle anzeigen
- ✅ Nur kompatible
⚠️ Mit Warnungen- ❌ Mit Fehlern
- Liste wird automatisch gefiltert
- Benutzer laden
- Klick auf 📤 Export CSV
- CSV-Datei wird im Exports-Ordner erstellt
- Enthält: DisplayName, SamAccountName, Mail, ProxyAddress, Typ, IsPrimary
- Benutzer auswählen
- Klick auf 📜 History
- Zeigt alle Änderungen für diesen Benutzer:
- Zeitpunkt
- Aktion (Hinzugefügt, Gelöscht, Bearbeitet)
- ProxyAddress
- Ausgeführt von
- Benutzer laden
- Klick auf 📊 Statistik
- Dashboard zeigt:
- Benutzer-Statistiken (Gesamt, mit/ohne ProxyAddresses)
- MS365-Kompatibilität (Kompatibel, Warnungen, Fehler)
- ProxyAddress-Statistiken (Gesamt, Durchschnitt, Typen)
- Prozentuale Verteilung
| Status | Bedeutung | Aktion |
|---|---|---|
| ✅ OK | ProxyAddress ist MS365-kompatibel | Keine Aktion nötig |
| X500-Adresse von altem Exchange | Normal für Migration | |
| ❌ Ungültig | Format-Fehler oder unerlaubte Zeichen | Korrektur erforderlich |
Problem: Benutzer hat keine SMTP: Adresse (Großbuchstaben)
Lösung:
- Sekundäre smtp: Adresse auswählen
- Klick auf ⭐ Als Primär
Problem: Mehrere SMTP: Adressen vorhanden
Lösung:
- Falsche primäre Adresse auswählen
- Klick auf ✏️ Bearbeiten
- Zu
smtp:ändern (Kleinbuchstaben)
Problem: Mail-Attribut ≠ primäre SMTP-Adresse
Lösung:
- Korrekte Adresse als primär setzen
- Mail-Attribut wird automatisch aktualisiert
Problem: legacyExchangeDN nicht als X500 ProxyAddress vorhanden
Lösung:
- Klick auf ➕ Hinzufügen
- Typ:
X500: - Adresse: Wert aus legacyExchangeDN
Script-Verzeichnis\
├── Logs\
│ └── USERNAME\
│ ├── USERNAME_2025-12-08.log # Haupt-Log
│ └── DEBUG_USERNAME_2025-12-08.log # Debug-Log
├── Exports\
│ └── ProxyAddresses_Export_2025-12-08_14-30-00.csv
└── History\
├── user1_2025-12-08_14-25-30.csv
└── user2_2025-12-08_15-10-45.csv
- Session-Start und -Ende
- Alle Benutzer-Änderungen
- AD-Abfragen
- Fehler und Warnungen
- Erfolgreiche Operationen
- Alle Meldungen inklusive DEBUG-Level
- Detaillierte Kontext-Informationen
- Thread-IDs
- Performance-Daten
| Level | Beschreibung | Haupt-Log | Debug-Log |
|---|---|---|---|
| INFO | Allgemeine Informationen | ✅ | ✅ |
| SUCCESS | Erfolgreiche Operationen | ✅ | ✅ |
| WARNING | Warnungen | ✅ | ✅ |
| ERROR | Fehler | ✅ | ✅ |
| ACTION | Benutzer-Änderungen | ✅ | ✅ |
| DEBUG | Debug-Informationen | ❌ | ✅ |
╔═══════════════════════════════════════════════════════════════════════════╗
║ BENUTZER-ÄNDERUNG PROTOKOLLIERT ║
╚═══════════════════════════════════════════════════════════════════════════╝
Zeitpunkt: 2025-12-08 20:15:32
Ausgeführt von: administrator@DOMAIN
Computer: DC01
AKTION: ProxyAddress HINZUGEFÜGT
ZIEL-BENUTZER: Max Mustermann (mmustermann)
E-Mail: [email protected]
UPN: [email protected]
DN: CN=Max Mustermann,OU=Users,DC=domain,DC=com
ProxyAddress: smtp:[email protected]
Details: ProxyAddress wurde erfolgreich hinzugefügt
═══════════════════════════════════════════════════════════════════════════
# In Zeile 623-624 des Scripts:
$script:MaxLogAgeDays = 90 # Logs älter als 90 Tage werden gelöscht
$script:EnableDebugLogging = $true # Debug-Log aktivieren/deaktivierenLogs:
- Standard:
<Script-Verzeichnis>\Logs\<USERNAME>\ - Fallback:
%TEMP%\easyEXCH_PMA_Logs\<USERNAME>\
Exports:
<Script-Verzeichnis>\Exports\
History:
<Script-Verzeichnis>\History\- Automatischer Backup vor jeder Änderung
- Format:
USERNAME_TIMESTAMP.csv
Das Script ist vollständig PS2EXE-kompatibel und kann als eigenständige EXE-Datei kompiliert werden.
# PS2EXE Modul installieren
Install-Module PS2EXE -Scope CurrentUserps2exe .\easyEXCH-PMA_V1.0.0.ps1 .\easyEXCH-PMA.exe `
-noConsole `
-STA `
-x64 `
-iconFile .\icon.ico `
-title "easyEXCH ProxyAddress Manager" `
-description "ProxyAddress Manager für MS365 ADSync" `
-company "PhinIT.DE" `
-product "easyEXCH ProxyAddress Manager" `
-copyright "© 2025 Andreas Hepp - www.phinit.de" `
-version "1.0.0" `
-DPIAware `
-winFormsDPIAware| Parameter | Beschreibung |
|---|---|
-noConsole |
Keine Console-Fenster (GUI-Modus) |
-STA |
Single Thread Apartment (erforderlich für GUI-Dialoge) |
-x64 |
64-bit Executable |
-iconFile |
Icon für die EXE-Datei |
-title |
Titel in Eigenschaften |
-version |
Versions-Nummer |
✅ Implementiert:
- Keine Console-Ausgaben
- Progress Bars deaktiviert (
$ProgressPreference = 'SilentlyContinue') - Visual Styles aktiviert
- Pfad-Erkennung für Script & EXE
- Logging funktioniert in beiden Modi
- OS: Windows 10 / Windows Server 2016
- PowerShell: 5.1
- RAM: 512 MB
- Disk: 50 MB
- OS: Windows 11 / Windows Server 2022
- PowerShell: 5.1
- RAM: 2 GB
- Disk: 100 MB (inkl. Logs)
- ActiveDirectory (automatisch auf Domain Controllern)
Installation auf Clients:
# RSAT Tools installieren
Add-WindowsCapability -Online -Name Rsat.ActiveDirectory.DS-LDS.Tools~~~~0.0.1.0- Lesen: Alle Benutzer-Attribute
- Schreiben: ProxyAddresses, Mail, MailNickname
- ❌ Nicht unterstützt: PowerShell 6.x / 7.x
- ✅ Nur: PowerShell 5.1
- Funktioniert nur mit lokalem Active Directory
- Keine Azure AD / Entra ID Unterstützung
- Keine direkte Exchange Online Verbindung
- Nur AD-Verwaltung (für ADSync)
- Keine Massen-Änderungen an ProxyAddresses
- Benutzer müssen einzeln bearbeitet werden
- Bulk-Export und Bulk-Validierung sind verfügbar
Lösung: Active Directory Modul installieren
Add-WindowsCapability -Online -Name Rsat.ActiveDirectory.DS-LDS.Tools~~~~0.0.1.0Lösung:
- PowerShell 5.1 verwenden (nicht Core)
- .NET Framework 4.7+ installieren
- Script als Administrator ausführen
Lösung:
- Schreibrechte im Script-Verzeichnis prüfen
- Logs werden automatisch in
%TEMP%\easyEXCH_PMA_Logs\erstellt (Fallback) - Prüfen:
$script:LogFileVariable im Debug-Modus
Lösung:
- Ordner werden automatisch beim ersten Export/History erstellt
- Schreibrechte im Script-Verzeichnis prüfen
- Bei Bedarf manuell erstellen:
New-Item -Path "Exports" -ItemType Directory New-Item -Path "History" -ItemType Directory
Lösung:
- Zuerst Benutzer laden ("Alle Benutzer laden" oder Suche)
- Filter funktioniert nur mit geladenen Benutzern
- Filter zurücksetzen auf "Alle anzeigen"
Lösung:
- Zuerst Benutzer laden
- Mindestens 1 Benutzer muss geladen sein
- Statistik funktioniert nur mit geladenen Benutzern
Lösung:
- Mindestens 3 Zeichen eingeben
- Domain Controller Erreichbarkeit prüfen
- Berechtigungen prüfen
- Debug-Log prüfen
Lösung:
- Berechtigungen prüfen (Schreibrechte auf ProxyAddresses)
- Benutzer ist nicht gesperrt
- AD-Replikation abwarten
- Mehrsprachigkeit - Vollständige Unterstützung für Deutsch und Englisch
- Live-Umschaltung über 🌐 DE/EN Buttons im Header
- Alle GUI-Elemente, Buttons, Labels, Tooltips übersetzt
- Alle Status-Meldungen und Dialoge lokalisiert
- DataGrid-Spalten mehrsprachig
- Export-Funktion - CSV-Export aller ProxyAddresses
- Exportiert DisplayName, SamAccountName, Mail, ProxyAddress, Typ, IsPrimary
- Speichert in Exports-Ordner mit Timestamp
- 📤 Export CSV Button
- History-Funktion - Änderungsverlauf pro Benutzer
- Automatischer Backup vor jeder Änderung
- Zeigt alle Änderungen mit Zeitpunkt, Aktion, ProxyAddress, Benutzer
- 📜 History Button
- Statistik-Dashboard - Detaillierte Übersicht
- Benutzer-Statistiken (Gesamt, mit/ohne ProxyAddresses)
- MS365-Kompatibilität (✅ Kompatibel,
⚠️ Warnungen, ❌ Fehler) - ProxyAddress-Statistiken (Gesamt, Durchschnitt, Typen: SMTP, smtp, SIP, X500)
- Prozentuale Verteilung
- 📊 Statistik Button
- Filter-Funktion - Benutzer nach Kompatibilität filtern
- 🔍 Alle anzeigen
- ✅ Nur kompatible
⚠️ Mit Warnungen- ❌ Mit Fehlern
- Erweiterte Logging-Funktionen
- Benutzer-spezifische Log-Ordner (Logs\USERNAME)
- Haupt-Log für alle Aktionen
- Debug-Log für detaillierte Informationen
- Automatische Log-Bereinigung (älter als 90 Tage)
- Detaillierte Benutzer-Änderungs-Protokollierung
- Session-Header und -Footer
- Thread-IDs und Kontext-Informationen
- Verbesserte Button-Darstellung
- Breitere Action-Buttons mit vollständigem Text
- Grid-Layout für optimale Platznutzung
- Emoji + Text für bessere Erkennbarkeit
- Intelligente Domänen-Filterung
- Automatisches Filtern lokaler/interner TLDs
- Nur öffentliche Domänen (com, de, net, etc.) werden angezeigt
- Blacklist für local, internal, corp, test, etc.
- Optimierte Benutzerführung
- Alle Tooltips lokalisiert
- Konsistente Fehlermeldungen
- Verbesserte Status-Anzeigen
- Farbcodierte Status-Meldungen (Grün/Orange/Rot)
- Array-Konvertierung bei Suchergebnissen
- Count-Property bei einzelnen Ergebnissen
- Filter-Übergabe an Get-ADUser
- Get-LocalizedString Parameter-Handling
- Footer-Anzeige bei Sprachwechsel
- Platzhalter-Ersetzung in lokalisierten Strings
- Vollständige PS2EXE-Kompatibilität
- Optimierte GUI-Performance
- Bessere Fehlerbehandlung
- Erweiterte Logging-Funktionen mit Thread-IDs
- Automatische Ordner-Erstellung (Logs, Exports, History)
- Fallback-Mechanismus für Logging (TEMP-Ordner)
Dieses Projekt ist unter der MIT-Lizenz lizenziert.
MIT License
Copyright (c) 2025 Andreas Hepp - www.phinit.de
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
- PS2EXE - Markus Scholtes für das großartige PowerShell zu EXE Konvertierungs-Tool
- Microsoft - Für PowerShell, WPF und Active Directory Module
- Community - Für Feedback und Testing
- Zeilen Code: ~2700 Zeilen PowerShell
- Funktionen: 40+ Funktionen
- Sprachen: 2 (Deutsch, Englisch)
- Übersetzungen: 60+ UI-Strings pro Sprache
- Features: 15+ Hauptfunktionen
Entwickelt mit ❤️ von Andreas Hepp
