In immer mehr Unternehmen wird die Microsoft Cloud eingesetzt und damit auch Azure AD. Dementsprechend wird eine saubere Synchronisation vom Active Directory in das Azure AD immer wichtiger. Jedoch werden auch die Active Directory Infrastrukturen in großen Unternehmen immer komplexer und erzeugen so die eine oder andere Herausforderung.
Problembeschreibung
Nehmen wir an, in ihrem Active Directory gibt es mehrere Domänen. Demzufolge sind auch im Azure AD mehrere Verbunddomänen eingerichtet. Das könnte beispielsweise contoso-ag.com und contoso-gmbh.com. Nun wechselt ein Mitarbeiter innerhalb der Organisation von Contoso AG nach Contoso GmbH und erhält einen neuen UPN. Aus max.mustermann@contoso-ag.com wird max.mustermann@contoso-gmbh.com. Sein Benutzer im AD bleibt dabei bestehen. Bei der Synchronisation des Benutzers aus dem lokalen AD zum Azure AD kommt es nun zu einem Fehler:
Error Name: DataValidationFailed
Error Detail: Dieses Objekt kann in Azure Active Directory nicht aktualisiert werden, da das Attribut „FederatedUser.UserPrincipalName“ ungültig ist. Aktualisieren Sie den Wert in Ihren lokalen Verzeichnisdiensten.
Error ID: 6941
Und der Report sieht etwa folgerdermaßen aus:
Dies ist seitens Microsoft ein bekanntes Problem, welches im Artikel KB2669550 beschrieben wird.
Problemursache
Dieser Fehler tritt nur dann auf, wenn mehrere Verbunddomänen im Azure AD konfiguriert sind und sich das Benutzerobjekt nicht in der primären Verbunddomäne befindet. Das bedeutet, der Dienst selbst lässt diese Änderung nicht zu.
Lösung
Grundsätzlich
Zur Behebung des Fehlers benötigen wir das cmdlet „Set-MsolUserPrincipalName“ aus der Windows Azure Active Directory Powershell Konsole. Dabei wird nicht der UPN auf die neue Verbunddomäne, sondern auf den UPN der primären Domäne „contoso.onmicrosoft.com“ geändert. Dazu benötigt man allerdings den aktuellen UPN des Benutzers, welcher unglücklicherweise nicht im Report ausgegeben wird.

Azure AD – Domänennamen
per Skript
Das PowerShell-Skript „Update-FederatedUPN.ps1“ benötigt die immutableID (im Report „sourceAnchor“ genannt) als Übergabeparameter. Davon ausgehend, dass sie bereits via Powershell mit dem Azure Active Directory verbunden sind, sucht das Script nach dem aktuellen UPN des Benutzers und ändert den Suffix zu „contoso.onmicrosoft.com“. Bei der nächsten Verzeichnissynchronisation wird dann der UPN des Benutzers in die neue Verbunddomäne geändert.
Um mögliche Konflikte mit bestehenden Cloud Benutzern zu vermeiden, wird dem neuen UPN ein „_temp_“ vorangestellt. Dies erleichtert zudem die Suche.
Sollten sie mehrere Benutzerobjekte mit dieser Fehlermeldung in ihrem E-Mail-Report haben, können sie die Spalte mit den immutableIDs aus dieser herauskopieren, in eine Textdatei zwischenspeichern und ein einer Schleife durchlaufen lassen.
per Skript ohne Kopieren & Einfügen
Bei einer wirklich großen Anzahl an Benutzer, empfiehlt es sich jedoch den gesamten Vorgang zu automatisieren. Dazu gibt es noch eine Möglichkeit die UPNs anzupassen.
Man benötigt zunächst einmal einen aussagekräftigen Fehlerbericht. Diesen kann glücklicherweise das Microsoft Azure AD Sync liefern. Hierzu wechseln wir zunächst in der Kommandozeile in das „bin“ Verzeichnis:
cd "C:\Program Files\Microsoft Azure AD Sync\bin"
und generieren einen XML-Report:
CSExport "[Name des AD Konnektors]" [Ziel]\Errors-Export.xml /f:x
Etweder arbeitet man mit dem XML-Report weiter, oder generiert eine besser lesbare CSV daraus:
CSExportAnalyzer [Ziel]\Errors-Export.xml > [Ziel]\Errors-Export.csv
Die eckigen Klammern [] lässt man dabei natürlich weg und trägt entsprechende Werte ein, wie beispielsweise:
CSExport "contoso.onmicrosoft.com - AAD" C:\Temp\Errors-Export.xml /f:x
CSExportAnalyzer C:\Temp\Errors-Export.xml > C:\Temp\Errors-Export.csv
So richtig lesbar werden die Daten dadurch allerdings nicht. Daher bemühen wir noch einmal Powershell, um uns die immutableID aus dem XML zu liefern, und zwar nur die mit der entsprechenden Fehlermelung „DataValidationFailed“.
Zuerst lesen wir unseren xml Report ein:
[xml] $xmlContent = [xml] (Get-Content -Path $xmlFilePath)
Aschließend durchsuchen wir die Datei nach der Fehlermeldung und lassen uns die immutableID zu dem jeweiligen Datensatz ausgeben:
$xmlContent.SelectNodes("/cs-objects/cs-object") | % { $csObj = $_ $founderror = $csObj.'export-errordetail'.'export-status'.'cd-error'.'error-name' if($founderror -eq "DataValidationFailed") { $immutableId = $csObj.'pending-import-hologram'.entry.attr | Where-Object {$_.name -eq "sourceAnchor"} Write-Host $immutableId.value } }
Anstatt der Ausgabe der immutableID kann man diese dann auch an das Update-FederatedUPN.ps1 Skript übergeben.