Deaktiviertes Postfach suchen und mit Benutzerkonto verbinden (3/3)
Mailboxen zu deaktivieren und zu verbinden mit PowerShell sind für Sie wahrscheinlich keine Herausforderung mehr, wenn Sie unsere beiden ersten Artikel gelesen haben.
Im letzten Teil der 3-teiligen Serie „Exchange und PowerShell – IDM und E-Mail“ können wir einen Schritt weitergehen. Wir suchen mit PowerShell ein deaktiviertes Postfach und verbinden es mit einem Benutzerkonto.
Die PS-Skripte sind unabhängig vom IDM-Portal – sparen in Kombination mit diesem der IT aber viel Arbeit.
Wenn Sie mehr zu Exchange und Identity Management lesen möchten bzw. gern von vorn beginnen wollen, können Sie mit den Artikeln Exchange Mailboxen deaktivieren und Mailbox in eine andere Datenbank verschieben starten.
Index
Deaktiviertes Postfach finden und AD Benutzer verbinden
Per PowerShell ein deaktiviertes Postfach suchen
Zunächst muss das Postfach gefunden werden, welches wieder verbunden werden soll. Dafür kann man das Cmdlet „Get-MailboxStatistics“ nutzen.
Wenn Sie nicht genau wissen, in welcher Datenbank das Postfach liegt, lesen Sie alle Postfachdatenbanken aus, welche zur Verfügung stehen. In allen Datenbanken sucht es dann nach einem deaktivierten Postfach (DisconnectReason = „Disabled“), welches als DisplayName „muster“ enthält. Ist der genaue DisplayName des Postfaches bekannt, kann es mit $_.DisplayName -eq „Maximilian Muster“ suchen. Wichtige Daten des Postfaches, wie
– MailboxGuid (Identifier des Postfaches)
– OwnerADGuid (GUID des AD-Benutzerkontos, mit dem das Postfach verknüpft war), DatabaseName (Name der Postfachdatenbank)
– LegacyDN (eindeutiger DistinguishedName des Postfaches)
können als Konsolenausgabe zur Überprüfung angezeigt werden.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<span class="crayon-v">$session</span> <span class="crayon-o">=</span> <span class="crayon-r ">New-PSSession</span> <span class="crayon-cn">-ConfigurationName</span> <span class="crayon-i">Microsoft</span><span class="crayon-sy">.</span><span class="crayon-i">Exchange</span> <span class="crayon-cn">-ConnectionUri</span> <span class="crayon-i">http</span><span class="crayon-o">:</span><span class="crayon-o">/</span><span class="crayon-o">/</span><span class="crayon-i">exc01</span><span class="crayon-o">/</span><span class="crayon-i">PowerShell</span><span class="crayon-o">/</span> <span class="crayon-cn">-Authentication</span> <span class="crayon-e">Kerberos</span> <span class="crayon-r ">Import-PSSession</span> <span class="crayon-cn">-Session</span> <span class="crayon-v">$session</span> <span class="crayon-cn">-CommandName</span> <span class="crayon-r ">Get-MailboxDatabase</span><span class="crayon-sy">,</span> <span class="crayon-i">Get</span><span class="crayon-o">-</span> <span class="crayon-i">MailboxStatistics</span><span class="crayon-sy">,</span> <span class="crayon-r ">Connect-Mailbox</span> <span class="crayon-r ">Get-MailboxDatabase</span> <span class="crayon-o">|</span> <span class="crayon-st">Foreach</span> <span class="crayon-sy">{</span> <span class="crayon-r ">Get-MailboxStatistics</span> <span class="crayon-cn">-Database</span> <span class="crayon-v">$_</span><span class="crayon-sy">.</span><span class="crayon-i">DistinguishedName</span> <span class="crayon-sy">}</span> <span class="crayon-o">|</span> <span class="crayon-st">Where</span> <span class="crayon-sy">{</span> <span class="crayon-v">$_</span><span class="crayon-sy">.</span><span class="crayon-i">DisconnectReason</span><span class="crayon-sy">.</span><span class="crayon-i">Value</span> <span class="crayon-cn">-eq</span> <span class="crayon-s">"Disabled"</span> <span class="crayon-cn">-and</span> <span class="crayon-v">$_</span><span class="crayon-sy">.</span><span class="crayon-i">Displayname</span> <span class="crayon-cn">-like</span> <span class="crayon-s">"*muster*"</span><span class="crayon-sy">}</span> <span class="crayon-o">|</span> <span class="crayon-st">ForEach</span> <span class="crayon-sy">{</span> <span class="crayon-r ">Write-Host</span><span class="crayon-sy">(</span><span class="crayon-s">"MailboxGuid: "</span> <span class="crayon-o">+</span> <span class="crayon-v">$_</span><span class="crayon-sy">.</span><span class="crayon-i">MailboxGuid</span><span class="crayon-sy">)</span> <span class="crayon-r ">Write-Host</span><span class="crayon-sy">(</span><span class="crayon-s">"OwnerADGuid: "</span> <span class="crayon-o">+</span> <span class="crayon-v">$_</span><span class="crayon-sy">.</span><span class="crayon-i">OwnerADGuid</span><span class="crayon-sy">)</span> <span class="crayon-r ">Write-Host</span><span class="crayon-sy">(</span><span class="crayon-s">"DisplayName: "</span> <span class="crayon-o">+</span> <span class="crayon-v">$_</span><span class="crayon-sy">.</span><span class="crayon-i">DisplayName</span><span class="crayon-sy">)</span> <span class="crayon-r ">Write-Host</span><span class="crayon-sy">(</span><span class="crayon-s">"DatabaseName: "</span> <span class="crayon-o">+</span> <span class="crayon-v">$_</span><span class="crayon-sy">.</span><span class="crayon-i">DatabaseName</span><span class="crayon-sy">)</span> <span class="crayon-r ">Write-Host</span><span class="crayon-sy">(</span><span class="crayon-s">"LegacyDN: "</span> <span class="crayon-o">+</span> <span class="crayon-v">$_</span><span class="crayon-sy">.</span><span class="crayon-i">LegacyDN</span><span class="crayon-sy">)</span><span class="crayon-h"> </span> <span class="crayon-sy">}</span> |
Bei der Suche nach einem Postfach anhand des DisplayName sollten Sie explizit die Abfrage nach dem DisconnectReason = „Disabled“ mit angeben. Unter Umständen noch ein vorläufig gelöschtes Postfach mit demselben DisplayName existiert.
Wenn ein Postfach in eine andere Postfachdatenbank verschoben wird, so löscht Exchange das Postfach nicht vollständig aus der Quelldatenbank, wenn die Verschiebung abgeschlossen ist.
zB: eine andere Datenbank im Abschnitt Postfach in verschieben
Es wird lediglich in den Zustand „vorläufige Löschung“ gesetzt (DisconnectReason = “SoftDeleted“).
Vorläufig gelöschte Postfächer werden wie deaktivierte Postfächer nach dem in der Datenbank angegebenen Zeitraum gelöscht. Alternativ können Sie auch das Postfach mit dem Cmdlet „Remove-StoreMailbox“ löschen.
Sie sollten also sicherstellen, dass Sie nicht mit einem SoftDeleted-Postfach das Benutzerkonto verbinden.
Active Directory Benutzerkonto verknüpfen
Wenn Sie das richtige Postfach gefunden haben, können Sie dies mit einem Benutzerkonto verknüpfen. Unter Angabe der Datenbank und der Postfach-Identity (Display Name, MailboxGuid, LegacyDN) wird das Postfach von Maximilian Muster verbunden. Da wir kein AD-Benutzerkonto angegeben haben, versucht der Befehl selbst, ein eindeutig zugeordnetes Benutzerkonto zu finden.
1 2 |
<span class="crayon-r ">Connect-Mailbox</span> <span class="crayon-cn">-Database</span> <span class="crayon-s">"PF deaktiviert"</span> <span class="crayon-cn">-Identity</span> <span class="crayon-s">"Maximilian Muster"</span> <span class="crayon-cn">-Confirm</span><span class="crayon-o">:</span><span class="crayon-v">$False</span> |
Connect-Mailbox -Database “PF deaktiviert” -Identity “Maximilian Muster”. Sie haben auch die Möglichkeit das deaktivierte Postfach von Maximilian Muster mit einem anderen AD-Benutzer (hier Frenzel) zu verbinden. Ein Anwendungsfall dafür wäre, wenn das ursprünglich verknüpfte AD-Konto von Maximilian Muster gelöscht und ein neues Konto für ihn angelegt wurde. Somit lässt sich das Postfach dann mit dem neuen AD-Benutzerkonto von Maximilian Muster verbinden.
1 2 |
<span class="crayon-r ">Connect-Mailbox</span> <span class="crayon-cn">-Database</span> <span class="crayon-s">"PF deaktiviert"</span> <span class="crayon-cn">-Identity</span> <span class="crayon-s">"Maximilian Muster"</span> <span class="crayon-cn">-User</span> <span class="crayon-s">"Frenzel"</span> <span class="crayon-cn">-Confirm</span><span class="crayon-o">:</span><span class="crayon-v">$False</span> |
Die PS-Session schließt abschließen wieder:
1 |
<span class="crayon-r ">Remove-PSSession</span> <span class="crayon-v">$session</span> |
PS-Skript: Deaktiviertes Postfach suchen und in eine andere Datenbank verschieben
Nachdem das Postfach wieder verbunden ist, kann es beliebig in eine andere Datenbank verschoben werden (detailliert unter Mailbox in eine andere Datenbank verschieben).
Hier nun noch einmal das komplette Skript:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
<span class="crayon-v">$session</span> <span class="crayon-o">=</span> <span class="crayon-r ">New-PSSession</span> <span class="crayon-cn">-ConfigurationName</span> <span class="crayon-i">Microsoft</span><span class="crayon-sy">.</span><span class="crayon-i">Exchange</span> <span class="crayon-cn">-ConnectionUri</span> <span class="crayon-i">http</span><span class="crayon-o">:</span><span class="crayon-o">/</span><span class="crayon-o">/</span><span class="crayon-i">exc01</span><span class="crayon-o">/</span><span class="crayon-i">PowerShell</span><span class="crayon-o">/</span> <span class="crayon-cn">-Authentication</span> <span class="crayon-e">Kerberos</span> <span class="crayon-r ">Import-PSSession</span> <span class="crayon-cn">-Session</span> <span class="crayon-v">$session</span> <span class="crayon-cn">-CommandName</span> <span class="crayon-r ">Get-MailboxDatabase</span><span class="crayon-sy">,</span> <span class="crayon-r ">Get-MailboxStatistics</span><span class="crayon-sy">,</span> <span class="crayon-r ">Connect-Mailbox</span> <span class="crayon-r ">Get-MailboxDatabase</span> <span class="crayon-o">|</span> <span class="crayon-st">Foreach</span> <span class="crayon-sy">{</span> <span class="crayon-r ">Get-MailboxStatistics</span> <span class="crayon-cn">-Database</span> <span class="crayon-v">$_</span><span class="crayon-sy">.</span><span class="crayon-i">DistinguishedName</span> <span class="crayon-sy">}</span> <span class="crayon-o">|</span> <span class="crayon-st">Where</span> <span class="crayon-sy">{</span> <span class="crayon-v">$_</span><span class="crayon-sy">.</span><span class="crayon-i">DisconnectReason</span><span class="crayon-sy">.</span><span class="crayon-i">Value</span> <span class="crayon-cn">-eq</span> <span class="crayon-s">"Disabled"</span> <span class="crayon-cn">-and</span> <span class="crayon-v">$_</span><span class="crayon-sy">.</span><span class="crayon-i">Displayname</span> <span class="crayon-cn">-like</span> <span class="crayon-s">"*Muster*"</span><span class="crayon-sy">}</span> <span class="crayon-o">|</span> <span class="crayon-st">ForEach</span> <span class="crayon-sy">{</span> <span class="crayon-r ">Write-Host</span><span class="crayon-sy">(</span><span class="crayon-s">"MailboxGuid: "</span> <span class="crayon-o">+</span> <span class="crayon-v">$_</span><span class="crayon-sy">.</span><span class="crayon-i">MailboxGuid</span><span class="crayon-sy">)</span> <span class="crayon-r ">Write-Host</span><span class="crayon-sy">(</span><span class="crayon-s">"OwnerADGuid: "</span> <span class="crayon-o">+</span> <span class="crayon-v">$_</span><span class="crayon-sy">.</span><span class="crayon-i">OwnerADGuid</span><span class="crayon-sy">)</span> <span class="crayon-r ">Write-Host</span><span class="crayon-sy">(</span><span class="crayon-s">"DisplayName: "</span> <span class="crayon-o">+</span> <span class="crayon-v">$_</span><span class="crayon-sy">.</span><span class="crayon-i">DisplayName</span><span class="crayon-sy">)</span> <span class="crayon-r ">Write-Host</span><span class="crayon-sy">(</span><span class="crayon-s">"DatabaseName: "</span> <span class="crayon-o">+</span> <span class="crayon-v">$_</span><span class="crayon-sy">.</span><span class="crayon-i">DatabaseName</span><span class="crayon-sy">)</span> <span class="crayon-r ">Write-Host</span><span class="crayon-sy">(</span><span class="crayon-s">"LegacyDN: "</span> <span class="crayon-o">+</span> <span class="crayon-v">$_</span><span class="crayon-sy">.</span><span class="crayon-i">LegacyDN</span><span class="crayon-sy">)</span><span class="crayon-h"> </span> <span class="crayon-sy">} </span> <span class="crayon-r ">Connect-Mailbox</span> <span class="crayon-cn">-Database</span> <span class="crayon-s">"PF deaktiviert"</span> <span class="crayon-cn">-Identity</span> <span class="crayon-s">"Maximilian Muster"</span> <span class="crayon-cn">-Confirm</span><span class="crayon-o">:</span><span class="crayon-v">$False </span> <span class="crayon-r ">Remove-PSSession</span> <span class="crayon-v">$session</span> |
Das Cmdlet „Connect-Mailbox“ lässt sich auch in die Abfrage des Postfaches integrieren. Hier sollten Sie nur sicher sein, dass Sie das gewünschte Postfach verbinden und nicht alle Postfächer deren DisplayName z.B. „muster“ enthält.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
<span class="crayon-v">$session</span> <span class="crayon-o">=</span> <span class="crayon-r ">New-PSSession</span> <span class="crayon-cn">-ConfigurationName</span> <span class="crayon-i">Microsoft</span><span class="crayon-sy">.</span> <span class="crayon-i">Exchange</span> <span class="crayon-cn">-ConnectionUri</span> <span class="crayon-i">http</span><span class="crayon-o">:</span><span class="crayon-o">/</span><span class="crayon-o">/</span><span class="crayon-i">exc01</span><span class="crayon-o">/</span><span class="crayon-i">PowerShell</span><span class="crayon-o">/</span> <span class="crayon-cn">-Authentication</span> <span class="crayon-e">Kerberos</span> <span class="crayon-r ">Import-PSSession</span> <span class="crayon-cn">-Session</span> <span class="crayon-v">$session</span> <span class="crayon-cn">-CommandName</span> <span class="crayon-r ">Get-MailboxDatabase</span><span class="crayon-sy">,</span> <span class="crayon-r ">Get-MailboxStatistics</span><span class="crayon-sy">,</span> <span class="crayon-r ">Connect-Mailbox</span> <span class="crayon-r ">Get-MailboxDatabase</span> <span class="crayon-o">|</span> <span class="crayon-st">Foreach</span> <span class="crayon-sy">{</span> <span class="crayon-r ">Get-MailboxStatistics</span> <span class="crayon-cn">-Database</span> <span class="crayon-v">$_</span><span class="crayon-sy">.</span><span class="crayon-i">DistinguishedName</span> <span class="crayon-sy">}</span> <span class="crayon-o">|</span> <span class="crayon-st">Where</span> <span class="crayon-sy">{</span> <span class="crayon-v">$_</span><span class="crayon-sy">.</span><span class="crayon-i">DisconnectReason</span><span class="crayon-sy">.</span><span class="crayon-i">Value</span> <span class="crayon-cn">-eq</span> <span class="crayon-s">"Disabled"</span> <span class="crayon-cn">-and</span> <span class="crayon-v">$_</span><span class="crayon-sy">.</span><span class="crayon-i">Displayname</span> <span class="crayon-cn">-like</span> <span class="crayon-s">"Maximilian Muster"</span><span class="crayon-sy">}</span> <span class="crayon-o">|</span> <span class="crayon-r ">Select-Object</span> <span class="crayon-cn">-First</span> 1 <span class="crayon-sy">{</span> <span class="crayon-r ">Write-Host</span><span class="crayon-sy">(</span><span class="crayon-s">"MailboxGuid: "</span> <span class="crayon-o">+</span> <span class="crayon-v">$_</span><span class="crayon-sy">.</span><span class="crayon-i">MailboxGuid</span><span class="crayon-sy">)</span> <span class="crayon-r ">Write-Host</span><span class="crayon-sy">(</span><span class="crayon-s">"OwnerADGuid: "</span> <span class="crayon-o">+</span> <span class="crayon-v">$_</span><span class="crayon-sy">.</span><span class="crayon-i">OwnerADGuid</span><span class="crayon-sy">)</span> <span class="crayon-r ">Write-Host</span><span class="crayon-sy">(</span><span class="crayon-s">"DisplayName: "</span> <span class="crayon-o">+</span> <span class="crayon-v">$_</span><span class="crayon-sy">.</span><span class="crayon-i">DisplayName</span><span class="crayon-sy">)</span> <span class="crayon-r ">Write-Host</span><span class="crayon-sy">(</span><span class="crayon-s">"DatabaseName: "</span> <span class="crayon-o">+</span> <span class="crayon-v">$_</span><span class="crayon-sy">.</span><span class="crayon-i">DatabaseName</span><span class="crayon-sy">)</span> <span class="crayon-r ">Write-Host</span><span class="crayon-sy">(</span><span class="crayon-s">"LegacyDN: "</span> <span class="crayon-o">+</span> <span class="crayon-v">$_</span><span class="crayon-sy">.</span><span class="crayon-i">LegacyDN</span><span class="crayon-sy">)</span> <span class="crayon-r ">Connect-Mailbox</span> <span class="crayon-cn">-Database</span> <span class="crayon-v">$_</span><span class="crayon-sy">.</span><span class="crayon-i">DatabaseName</span> <span class="crayon-cn">-Identity</span> <span class="crayon-v">$_</span><span class="crayon-sy">.</span><span class="crayon-i">DisplayName</span> <span class="crayon-cn">-Confirm</span><span class="crayon-o">:</span><span class="crayon-v">$False</span> <span class="crayon-sy">} </span> <span class="crayon-r ">Remove-PSSession</span> <span class="crayon-v">$session</span> |
Ihnen fehlt noch etwas? Sie können anschließend auch gleich automatisch einen neuen Exchange-Ordner anlegen. Wie das geht, erfahren Sie hier: PowerShell Exchange Ordner
AD- und Exchange-Benutzerverwaltung mit IDM-Portal
Neben Exchange und Exchange Online kommen täglich klassische Benutzerverwaltungsaufgaben in AD und M365 auf den Tisch. Die Verwaltung von Attributen, wie z.B. Telefonnummer, oder das Anlegen von neuen Benutzern ist erfahrungsgemäß ein zeitaufwändiger Aspekt der AD-Verwaltung. Allerdings können wir mit IDM-Portal viele Routineaufgaben an Nicht-IT-Mitarbeiter delegieren.
Dank der anwenderfreundlichen Oberfläche des IDM-Portals, können IT-ferne Mitarbeiter neue Benutzer anlegen, die Daten pflegen und die passenden Gruppen im Hintergrund zuordnen. Dazu müssen sie weder das Active Directory noch das Konzept von Berechtigungsgruppen verstehen.
Systempflege bleibt in der IT, die Datenpflege übernehmen Personal- und Fachabteilungen. So vermeiden Sie Fehler und alle Mitarbeiter können helfen, dass IT-Prozesse verkürzt werden.
Wenn Sie mehr über das IDM-Portal erfahren möchten, lesen Sie hier zur technischen Seite von IAM.? Oder Kontaktieren Sie uns: