Wiederherstellung von Benutzern in Entra ID
Entra ID verwendet ähnlich wie Active Directory eine Art Papierkorb, um gelöschte Objekte noch für einen gewissen Zeitraum (30 Tage) vorzuhalten. Dies ermöglicht eine schnelle Wiederherstellung.
Allerdings kann es spezielle Szenarien geben, in denen der Einsatz von PowerShell zielführender ist, beispielsweise
- wenn ein Benutzerkonto mit einem anderen Benutzerprinzipalnamen wiederhergestellt werden soll
- wenn die benutzerdefinierte Domäne des wiederherzustellenden Kontos nicht mehr existiert und das Konto auch E-Mail-Aliase dieser Domäne verwendet
Einfache Wiederherstellung mittels PowerShell
Eine einfache Wiederherstellung mit Standardeinstellungen kann sowohl über die grafische Oberfläche als auch mittels PowerShell erfolgen:
# Benötigtes Modul prüfen und bei Bedarf installieren
if (!(Get-InstalledModule Microsoft.Graph.Identity.DirectoryManagement -ErrorAction SilentlyContinue)){Install-Module Microsoft.Graph.Identity.DirectoryManagement -Scope CurrentUser}
# Zu Microsoft Graph mit den benötigten Berechtigungen verbinden
Connect-MgGraph -Scopes User.ReadWrite.All,User.DeleteRestore.All
# Wiederherstellungsmodus abfragen
$RestoreChoice = Read-Host 'Alle oder einzelnes Benutzerobjekt wiederherstellen? (1:Alle 2:Einzeln)'
# Alle Objekte wiederherstellen
if ($RestoreChoice -eq '1')
{
$DeletedObjects = Get-MgDirectoryDeletedItemAsUser -All
ForEach ($DeletedObject in $DeletedObjects)
{
Write-Host "Stelle $($DeletedObject.DisplayName) wieder her..." -ForeGroundColor Yellow
Restore-MgDirectoryDeletedItem -DirectoryObjectId $DeletedObject.Id
}
}
# Einzel-Wiederherstellung
if ($RestoreChoice -eq '2')
{
$Selection = Get-MgDirectoryDeletedItemAsUser -All | Out-GridView -Title 'Bitte wiederherzustellendes Objekt auswählen' -OutputMode:Single
Write-Host "Stelle $($Selection.DisplayName) wieder her..." -ForeGroundColor Yellow
Restore-MgDirectoryDeletedItem -DirectoryObjectId $Selection.Id
}PowerShellWiederherstellung ohne Aliase und/oder neuem Benutzerprinzipalnamen
Sofern zusätzliche Parameter für die Wiederherstellung erforderlich sind, reicht die vorher beschriebene Variante nicht aus, da hier keine individuellen Parameter definiert werden können. Individuelle Anforderungen können über zwei Varianten abgebildet werden:
- Graph API
- Entra PowerShell
Diese Vorgehensweise eignet sich beispielweise im Rahmen von Mandanten-Migrationen, bei denen benutzerdefinierte Domänen übertragen werden müssen. Hierzu ist es zunächst erforderlich, alle Referenzen zur Domäne in der Quellumgebung zu entfernen. Anstatt dies teilweise mühsam per Hand durchzuführen, können die Objekte temporär gelöscht und nach Übertragung der Domäne mittels der folgenden Skripte wiederhergestellt werden. Dies kann dazu beitragen, eine Migration erheblich zu beschleunigen.
Graph API
# Benötigte Module prüfen und bei Bedarf installieren
if (!(Get-InstalledModule Microsoft.Graph.Authentication -ErrorAction SilentlyContinue)){Install-Module Microsoft.Graph.Authentication -Scope CurrentUser}
if (!(Get-InstalledModule Microsoft.Graph.Identity.DirectoryManagement -ErrorAction SilentlyContinue)){Install-Module Microsoft.Graph.Identity.DirectoryManagement -Scope CurrentUser}
# Zu Microsoft Graph mit den benötigten Berechtigungen verbinden
Connect-MgGraph -Scopes User.ReadWrite.All,User.DeleteRestore.All,Domain.Read.All
# Parameter für die Wiederherstellung definieren
$params = @{
autoReconcileProxyConflict = $true # Mit diesem Parameter werden Aliase ignoriert, die auf einer nicht mehr existierenden Domäne basieren
}
# Wiederherstellungsmodus abfragen
$RestoreChoice = Read-Host 'Alle oder einzelnes Benutzerobjekt wiederherstellen? (1:Alle 2:Einzeln)'
# Wiederherstellungsmodus abfragen
$RestoreOptions = Read-Host 'Neuen Benutzerprinzipalnamen definieren? (1:Ja 2:Nein)'
if ($RestoreOptions -eq 1){$UserDomain = (Get-MgDomain | Out-GridView -Title 'Bitte neue Domäne auswählen' -OutputMode:Single).Id
# Alle Objekte wiederherstellen
if ($RestoreChoice -eq '1')
{
$DeletedObjects = Get-MgDirectoryDeletedItemAsUser -All
ForEach ($DeletedObject in $DeletedObjects)
{
if ($RestoreOptions -eq 1)
{
# Neuen Benutzerprinzipalnamen zusammenbauen
$UPN = $DeletedObject.Mail
$Temp = $UPN -Split ('@')
$Prefix = $Temp[0]
$NewUPN = $Prefix + '@' + $UserDomain
# Parameter hinzufügen
$UserParams['NewUserPrincipalName'] = $NewUPN
}
$URL = 'https://graph.microsoft.com/v1.0/directory/deletedItems/' + $DeletedObject.Id + '/restore'
Write-Host "Stelle Benutzer $($DeletedObject.DisplayName) wieder her..." -ForeGroundColor Yellow
Invoke-MgGraphRequest -Method POST $URL -Body $params
}
}
# Einzel-Wiederherstellung
if ($RestoreChoice -eq '2')
{
$Selection = Get-MgDirectoryDeletedItemAsUser -All | Out-GridView -Title 'Bitte wiederherzustellendes Objekt auswählen' -OutputMode:Single
if ($RestoreOptions -eq 1)
{
# Neuen Benutzerprinzipalnamen zusammenbauen
$UPN = $Selection.Mail
$Temp = $UPN -Split ('@')
$Prefix = $Temp[0]
$NewUPN = $Prefix + '@' + $UserDomain
# Parameter hinzufügen
$UserParams['NewUserPrincipalName'] = $NewUPN
}
$URL = 'https://graph.microsoft.com/v1.0/directory/deletedItems/' + $Selection.Id + '/restore'
Write-Host "Stelle Benutzer $($Selection.DisplayName) wieder her..." -ForeGroundColor Yellow
Invoke-MgGraphRequest -Method POST $URL -Body $params
} PowerShell
Entra PowerShell
# Benötigte Module prüfen und bei Bedarf installieren
if (!(Get-InstalledModule Microsoft.Entra.DirectoryManagement -ErrorAction SilentlyContinue)){Install-Module Microsoft.Entra.DirectoryManagement -Scope CurrentUser}
# Zu Entra ID verbinden
Connect-Entra -Scopes User.ReadWrite.All
# Parameter für die Wiederherstellung definieren
$params = @{
autoReconcileProxyConflict = $true # Mit diesem Parameter werden Aliase ignoriert, die auf einer nicht mehr existierenden Domäne basieren
}
# Wiederherstellungsmodus abfragen
$RestoreChoice = Read-Host 'Alle oder einzelnes Benutzerobjekt wiederherstellen? (1:Alle 2:Einzeln)'
# Wiederherstellungsmodus abfragen
$RestoreOptions = Read-Host 'Neuen Benutzerprinzipalnamen definieren? (1:Ja 2:Nein)'
if ($RestoreOptions -eq 1){$UserDomain = (Get-EntraDomain | Out-GridView -Title 'Bitte neue Domäne auswählen' -OutputMode:Single).Id
# Alle Benutzerobjekte wiederherstellen
if ($RestoreChoice -eq '1')
{
$DeletedObjects = Get-MgDirectoryDeletedItemAsUser -All
ForEach ($DeletedObject in $DeletedObjects)
{
if ($RestoreOptions -eq 1)
{
# Neuen Benutzerprinzipalnamen zusammenbauen
$UPN = $DeletedObject.Mail
$Temp = $UPN -Split ('@')
$Prefix = $Temp[0]
$NewUPN = $Prefix + '@' + $UserDomain
# Parameter hinzufügen
$UserParams['NewUserPrincipalName'] = $NewUPN
}
Write-Host "Stelle Benutzer $($Selection.DisplayName) wieder her..." -ForeGroundColor Blue
if ($RestoreOptions -eq 1){Restore-EntraDeletedDirectoryObject -Id $Selection.Id -AutoReconcileProxyConflict -NewUserPrincipalName $NewUPN}
if ($RestoreOptions -ne 1){Restore-EntraDeletedDirectoryObject -Id $Selection.Id -AutoReconcileProxyConflict}
}
}
# Einzelnes Benutzerobjekt wiederherstellen
if ($RestoreChoice -eq '2')
{
# Benutzer auswählen lassen, welches Objekt wiederhergestellt werden soll
$Selection = Get-MgDirectoryDeletedItemAsUser -All | Out-GridView -Title 'Please choose object to restore' -OutputMode:Single
if ($RestoreOptions -eq 1)
{
# Neuen Benutzerprinzipalnamen zusammenbauen
$UPN = $Selection.Mail
$Temp = $UPN -Split ('@')
$Prefix = $Temp[0]
$NewUPN = $Prefix + '@' + $UserDomain
# Parameter hinzufügen
$UserParams['NewUserPrincipalName'] = $NewUPN
}
Write-Host "Stelle Benutzer $($Selection.DisplayName) wieder her..." -ForeGroundColor Blue
if ($RestoreOptions -eq 1){Restore-EntraDeletedDirectoryObject -Id $Selection.Id -AutoReconcileProxyConflict -NewUserPrincipalName $NewUPN}
if ($RestoreOptions -ne 1){Restore-EntraDeletedDirectoryObject -Id $Selection.Id -AutoReconcileProxyConflict}
}PowerShell
Hat Dir der Beitrag gefallen? Lass es andere wissen!


