powershell:system:copy-exchangepermissionstomailstore
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
| Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
| powershell:system:copy-exchangepermissionstomailstore [2019/04/04 07:52] – angelegt henning | powershell:system:copy-exchangepermissionstomailstore [2024/05/27 08:36] (aktuell) – Externe Bearbeitung 127.0.0.1 | ||
|---|---|---|---|
| Zeile 9: | Zeile 9: | ||
| Generell ist es kein Problem, die Berechtigung auf ein Archiv anhand der Email-Adresse eines AD-Kontos mit eindeutiger Zuordnung abzuleiten. Problematisch ist die Berechtigung bei gemeinsam benutzten Postfächern (z.B. Abteilungs- oder Funktionspostfächer). Mailstore kennt keinen direkten Weg, solche zusätzlichen Berechtigungen Berechtigungen im AD auszulesen und auf das Archiv zu übertragen. Für diesen Einsatzzweck kann die Powershell-API verwendet werden. | Generell ist es kein Problem, die Berechtigung auf ein Archiv anhand der Email-Adresse eines AD-Kontos mit eindeutiger Zuordnung abzuleiten. Problematisch ist die Berechtigung bei gemeinsam benutzten Postfächern (z.B. Abteilungs- oder Funktionspostfächer). Mailstore kennt keinen direkten Weg, solche zusätzlichen Berechtigungen Berechtigungen im AD auszulesen und auf das Archiv zu übertragen. Für diesen Einsatzzweck kann die Powershell-API verwendet werden. | ||
| ====== Das Skript====== | ====== Das Skript====== | ||
| + | <file powershell Copy-ExchangePermissionsToMailstore.ps1> | ||
| + | <# Mailstore Benutzerverwaltung | ||
| + | Version=2.0 | ||
| + | Autor: Henning Löser | ||
| + | Datum: 17.07.2018 | ||
| + | == Historie =================================== | ||
| + | Version 2.0: 17.07.2018 | ||
| + | Umstellung der Benutzeridentifizierung von Alias auf Anmeldename | ||
| + | Löschen der Benutzerrechte und setzten als folgende Schritte pro Archiv | ||
| + | Version 1.2: 25.02.2016 | ||
| + | Gruppenmitgliedschaft der Ressourcenpostfächer prüfen und ggf. korrigieren | ||
| + | Version 1.1: 08.12.2015 | ||
| + | Groß- und Kleinschreibung der AD-Objkete wird von Mailstore nicht übernommen, | ||
| + | alle Objekte in Kleinbuchstaben übergeben | ||
| + | |||
| + | Version 1.0: 30.09.2014 | ||
| + | Produktive Nutzung | ||
| + | #> | ||
| + | |||
| + | ### 1. Definitionen und Import benötigter Funktionen | ||
| + | ## 1.1 Logging | ||
| + | # Logdatei setzen und Logaufzeichnung starten | ||
| + | $timestamp=(Get-Date -Format yyy-MM-dd-HHmmss) | ||
| + | $LogFile=" | ||
| + | Start-Transcript -Path $LogFile | ||
| + | |||
| + | # Mailstore API importieren | ||
| + | Import-Module " | ||
| + | |||
| + | # Exchange-SnapIn importieren | ||
| + | Add-PSSnapin Microsoft.Exchange.Management.PowerShell.E2010 | ||
| + | |||
| + | # Domäne festlegen | ||
| + | $AD_Domain=" | ||
| + | |||
| + | # Archiv-DB festlegen und Postfachrechte in Variable speichern | ||
| + | # Es werden nur Rechte von Archiven verwaltet, deren Postfächer in der Exchange-Datenbank liegen | ||
| + | $Exchange_Archiv_DB=" | ||
| + | |||
| + | |||
| + | # AD-Gruppe für die Anlage neuer Archive | ||
| + | # Es werden nur neue Archive angelegt für Postfächer in den Gruppen GLO_MA_INT, GLO_MA_EXT und RESSOURCENARCHIV | ||
| + | # GLO_MA_INT und GLO_MA_EXT werden automatisch befüllt | ||
| + | # RESSOURENARCHIV muss bei Anlage des Postfach manuell als Mitglied hinzugefügt werden. Wird das vergessen, erfolgt die Zuordnung hier noch einmal automatisch | ||
| + | $ArchivGruppe = " | ||
| + | |||
| + | # Postfächer der Exchange-Datenbank " | ||
| + | $ArchivMembersFromDB = Get-Mailbox -Database $Exchange_Archiv_DB | Select-Object samaccountname | ||
| + | |||
| + | # Mitglieder der Gruppe $ArchivGruppe abfragen | ||
| + | $ArchivMembersFromGroup = (Get-ADGroupMember -Identity $ArchivGruppe).SamAccountName | ||
| + | |||
| + | # Vergleich von $ArchivMembersFromDB und $ArchivMembersFromGroup | ||
| + | foreach ($ArchivMemberFromDB in $ArchivMembersFromDB) | ||
| + | { | ||
| + | # Wenn Postfach Mitglied in der Gruppe ist | ||
| + | if ($ArchivMemberFromDB.samaccountname -in $ArchivMembersFromGroup) | ||
| + | { | ||
| + | # Debug: Textausgabe nur einkommentieren bei Problemen | ||
| + | #write-host " | ||
| + | } | ||
| + | # Wenn Postfach nicht Mitglied in der Gruppe ist | ||
| + | else | ||
| + | { | ||
| + | # Textausgabe und Postfach zu der Gruppe hinzufügen. | ||
| + | write-host "Neues Mitglied von `" | ||
| + | Add-ADGroupMember -Identity $ArchivGruppe -Members $($ArchivMemberFromDB.samaccountname) | ||
| + | } | ||
| + | } | ||
| + | |||
| + | |||
| + | # Exchange-Archiv-Postfach-OU | ||
| + | # Es werden nur Rechte von Archiven verwaltet, deren Postfächer in der folgenden OU liegen | ||
| + | $Exchange_Archiv_OU=" | ||
| + | |||
| + | # MailstoreSession konfigurieren | ||
| + | $mailstore_server=" | ||
| + | $mailstore_port=" | ||
| + | $mailstore_username = " | ||
| + | $mailstore_password = get-content C: | ||
| + | # | ||
| + | $mailstore_credentials = new-object -typename System.Management.Automation.PSCredential -argumentlist $mailstore_username, | ||
| + | $mailstore_api = New-MSApiClient -Credentials $mailstore_credentials -MailStoreServer $mailstore_server -Port $mailstore_port -IgnoreInvalidSSLCerts | ||
| + | |||
| + | |||
| + | # zu setzende Mailstore-Rechte | ||
| + | $mailstore_default_permissions = " | ||
| + | $mailstore_no_permissions = " | ||
| + | |||
| + | |||
| + | ### 2. Informationen zusammentragen | ||
| + | ## 2.1 Mailstore Rechte | ||
| + | |||
| + | # Alle Mailstore-User abfragen | ||
| + | $mailstore_users = (Invoke-MSApiCall $mailstore_api " | ||
| + | |||
| + | # Die Berechtigungen aller MailstoreUser abfragen und in einem Array speichern | ||
| + | $MailstPermissionTable = @() | ||
| + | foreach ($mailstore_user in $mailstore_users) | ||
| + | { | ||
| + | $user=$mailstore_user.username | ||
| + | $MailstPermissions=(Invoke-MSApiCall $mailstore_api " | ||
| + | foreach ($MailstPermission in $MailstPermissions) | ||
| + | { | ||
| + | if ($($user) -ne $MailstPermission) | ||
| + | { | ||
| + | $NewPermission=New-Object –TypeName PSObject | ||
| + | $NewPermission | Add-Member –MemberType NoteProperty –Name UserName –Value $user.ToLower() –PassThru | Add-Member –MemberType NoteProperty –Name Archiv –Value $MailstPermission.ToLower() –PassThru | ||
| + | $MailstPermissionTable+=$NewPermission | ||
| + | } | ||
| + | } | ||
| + | } | ||
| + | |||
| + | # Array sorterien | ||
| + | $MailstPermissionTable = ($MailstPermissionTable | Sort-Object username, | ||
| + | |||
| + | |||
| + | ## 2.2 Exchange-Postfächer auslesen | ||
| + | $Exchange_Mailboxes=Get-Mailbox -Database " | ||
| + | # | ||
| + | |||
| + | ### 2.3 Alle Exchange-Berechtigungen abfragen | ||
| + | $All_Exchange_Permissions=($Exchange_Mailboxes | Get-MailboxPermission | where-object {($_.isinherited -eq $false) -and ($_.user -like " | ||
| + | |||
| + | # Alle Exchangeberechtigungen einem Array speichern | ||
| + | $ExchPermissionTable = @() | ||
| + | foreach ($ExchPermission in $All_Exchange_Permissions) | ||
| + | { | ||
| + | $archiv=$($ExchPermission.identity.name) | ||
| + | $user=$($ExchPermission.user).rawidentity.TrimStart(" | ||
| + | $NewPermission=New-Object –TypeName PSObject | ||
| + | $NewPermission | Add-Member –MemberType NoteProperty –Name UserName –Value $user.ToLower() -PassThru | Add-Member –MemberType NoteProperty –Name Archiv –Value $archiv.ToLower() -PassThru | ||
| + | $ExchPermissionTable+=$NewPermission | ||
| + | } | ||
| + | |||
| + | # Array sorterien | ||
| + | $ExchPermissionTable = ($ExchPermissionTable | Sort-Object username, | ||
| + | |||
| + | # | ||
| + | # | ||
| + | |||
| + | |||
| + | # Exchange und Mailstore-Array vergleichen | ||
| + | $changes=(Compare-Object $ExchPermissionTable $MailstPermissionTable -IncludeEqual) | ||
| + | |||
| + | # Was fehlt in Mailstore | ||
| + | $AddToMailstore=($changes | where-object sideindicator -like "< | ||
| + | |||
| + | # Was ist zu viel in Mailstore | ||
| + | $RemoveFromMailstore=($changes | where-object sideindicator -like " | ||
| + | |||
| + | Write-Host " | ||
| + | foreach ($permission in $($AddToMailstore.inputobject)) | ||
| + | { | ||
| + | Write-Host "User : $($permission.UserName) | Archiv: $($permission.Archiv)" | ||
| + | (Invoke-MSApiCall $mailstore_api " | ||
| + | } | ||
| + | |||
| + | Write-Host " | ||
| + | foreach ($permission in $($RemoveFromMailstore.inputobject)) | ||
| + | { | ||
| + | Write-Host "User : $($permission.UserName) | Archiv: $($permission.Archiv)" | ||
| + | (Invoke-MSApiCall $mailstore_api " | ||
| + | } | ||
| + | |||
| + | |||
| + | Stop-Transcript | ||
| + | |||
| + | |||
| + | ### 3. Rechte Verwalten | ||
| + | <# | ||
| + | ### 3.1 Rechte hinzufügen | ||
| + | foreach ($Exchange_Mailbox in $Exchange_Mailboxes) | ||
| + | { | ||
| + | Write-host "`n## Mailbox:" | ||
| + | $Exchange_Permissions=(Get-MailboxPermission $($Exchange_mailbox.samaccountname) | where-object {($_.isinherited -eq $false) -and ($_.user -like " | ||
| + | |||
| + | foreach ($Exchange_Permission in $Exchange_Permissions) | ||
| + | { | ||
| + | # Umformatierten Benutzernamen des AD-Benutzers in eine eigene Variable speichern | ||
| + | $exchange_permission_user=($Exchange_Permission.user).RawIdentity.TrimStart(" | ||
| + | | ||
| + | # Welche berechtigungen hat der Benutzer am Archiv? | ||
| + | $archive_permissions=(Invoke-MSApiCall $mailstore_api " | ||
| + | | ||
| + | $adusercheck=get-aduser $exchange_permission_user | ||
| + | # Debug: Ausgabe von Benutzername und Aktivierungsstatus | ||
| + | Write-host " | ||
| + | |||
| + | if ($($adusercheck.enabled) -eq $true) | ||
| + | { | ||
| + | if ($($archive_permissions.contains($($Exchange_Mailbox.samaccountname))) -eq $true) | ||
| + | { | ||
| + | # Debug: Augabe nur, wenn Benutzer keine Zugrifsrechte erhalten | ||
| + | # | ||
| + | } | ||
| + | Else | ||
| + | { | ||
| + | # Rechte von aktiven Benutzern auf das Archiv setzen | ||
| + | Write-Host " | ||
| + | (Invoke-MSApiCall $mailstore_api " | ||
| + | } | ||
| + | } | ||
| + | } | ||
| + | } | ||
| + | #> | ||
| + | </ | ||
powershell/system/copy-exchangepermissionstomailstore.1554357140.txt.gz · Zuletzt geändert: 2024/05/27 08:35 (Externe Bearbeitung)
