
1. Ein paar Worte vom Autor
Artikel aktualisiert. Skripte geändert. Skript zum Aktualisieren einer Mailingliste hinzugefügt.In den Kommentaren zum letzten Artikel wurde mir eine interessante Frage zur automatischen Bildung von Mailinglisten basierend auf AD-Sicherheitsgruppen gestellt. Es gibt ein Problem - es gibt eine Lösung. Also lass uns gehen.
2. Die Quelldaten
Server-Betriebssystem : CentOS 7
Über das BetriebssystemTatsächlich liegt der Unterschied zwischen CentOS7 und jedem anderen System ausschließlich in den Befehlen an den Server zum Installieren von Paketen und möglicherweise im Speicherort einiger Dateien. Die Arbeiten werden hauptsächlich mit Zimbra-Cmdlets ausgeführt, sodass die Konfigurationsunterschiede minimal sind.
Zimbra Domain : zimbramail.home.local
Der Pfad zum Montieren der Bälle auf dem Zimbra-Host : / mnt / ZM /
3. Setup
- Wir montieren den Windows-Ball auf unserem Linux-Server. Dies soll die Übertragung von Daten von Windows PowerShell zu Linux Bash vereinfachen und automatisieren. Das Montageverfahren wurde in einem früheren Artikel beschrieben. Ich werde mich nicht wiederholen.
- Wir erstellen in AD eine separate Organisationseinheit, in der wir Gruppen erstellen, auf deren Grundlage Mailinglisten in Zimbra erstellt werden. Gruppenname = Name der Verteilerliste.
- Wir fügen den in der neuen Organisationseinheit erstellten Gruppen Benutzer oder Sicherheitsgruppen hinzu, auf deren Grundlage die Mailinglisten in Zimbra ausgefüllt werden. Das Skript wird rekursiv ausgeführt. Dies bedeutet, dass alle Daten zu Benutzern erfasst werden, die sich in Gruppen befinden, die Gruppen in der Ziel-Organisationseinheit hinzugefügt werden. Weitere Informationen zur Ausgabe des Befehls Get-ADGroupMember .
- Erstellen Sie ein Skript zum Sammeln von Daten aus Active Directory.
- Wir erstellen ein Skript zum Hinzufügen von Mailinglisten und zum Ausfüllen durch Benutzer basierend auf den im vorherigen Skript empfangenen Daten.
- Viel Spaß.
3.1. Über OU
Ich habe die Organisationseinheit "ZimbraDL" im Stammverzeichnis der Domäne erstellt und ihr verboten, Gruppenrichtlinien zu erben, damit diese Gruppen getrennt bleiben. Sie werden in keiner Weise am Leben der Domain teilnehmen, außer bei der Erstellung von Verteilerlisten in der Zimbra Collaboration OSE.
4. PowerShell-Skript zum Sammeln von Daten aus AD
PowerShell-Skript$Path = "C:\ZM\ZimbraDL" $enc = [system.text.encoding] function ReCode ( $f, $t, $line ) { $cp1 = $enc::getencoding( $f ) $cp2 = $enc::getencoding( $t ) $inputbytes = $enc::convert( $cp1, $cp2, $cp2.getbytes( $line )) $outputstring = $cp2.getstring( $inputbytes ) $outputstring | add-content $OutputFile }
4.1. Wie das Skript funktioniert
- Zunächst wird geprüft, ob das Arbeitsverzeichnis vorhanden und gelöscht ist, sofern es vorhanden ist. Dies ist notwendig, damit sich die Daten dabei nicht verdoppeln.
- PoSh überprüft die angegebene Organisationseinheit, liest die darin enthaltenen Benutzergruppen und schreibt sie in die Datei GetGroupsAD.txt
- Verwirft alles Überflüssige aus der empfangenen Datei (PoSh schreibt die gesamte Ausgabe in die Datei, sodass in der ersten Ausgabe des Befehls die erste Zeile Name ist, die zweite Zeile das Trennzeichen "----" ist und erst danach die Gruppen einzeln aufgelistet werden), ändert die Codierung von "windows-1251" bis utf-8, was zu einer anderen Datei GroupsList.txt führt
- Basierend auf der empfangenen Datei werden ferner Informationen über Benutzer der in der Datei enthaltenen Gruppen gelesen. Dateien mit Benutzernamen (samAccountName)
im Verzeichnis \ Users abgelegt und nach Gruppennamen aufgerufen
4.2. Skript zum Lesen von Informationen aus einer einzelnen Gruppe
Ein Skript mit der Fähigkeit, Daten von nur einer Sicherheitsgruppe zu lesen, unterscheidet sich nicht wesentlich von der vorherigen, da es einen Block enthält, in dem der Benutzer aufgefordert wird, den Namen der Gruppe einzugeben, auf dessen Grundlage die Mailingliste aktualisiert werden muss.
PowerShell-Skript, das von Hand ausgeführt werden kann und Daten aus nur einer Gruppe lesen kann $Path = "C:\ZM\ZimbraDL" $enc = [system.text.encoding] function ReCode ( $f, $t, $line ) { $cp1 = $enc::getencoding( $f ) $cp2 = $enc::getencoding( $t ) $inputbytes = $enc::convert( $cp1, $cp2, $cp2.getbytes( $line )) $outputstring = $cp2.getstring( $inputbytes ) $outputstring | add-content $OutputFile }
5. Bash-Skript zum Erstellen von Mailinglisten
Ich werde eine Reservierung für das Kopieren von Skriptdateien vornehmen, die unter Windows erstellt wurdenIn einem früheren Artikel haben wir eine Methode zum Formatieren von Dateien mit dem Befehl cat beschrieben, mit der beim Starten mit einem bestimmten Schlüssel alle unnötigen unlesbaren Zeichen entfernt werden. Link zum Artikel am Ende des Artikels.
5.1. Wie das Skript funktioniert
- Schreiben Sie eine Liste von Gruppen in eine Datei
- Überprüfen Sie die Existenz der Mailingliste in Zimbra. Wenn sie existiert, löschen Sie sie
- Erstellen Sie Mailinglisten nacheinander basierend auf der Liste der Gruppen und füllen Sie jede mit Benutzern (die ID der Verteilerliste wird auf dem Bildschirm angezeigt, dies ist die Standardausgabe des Cmdlets zmprov beim Erstellen von DL). Dadurch wird das Vorhandensein von Benutzerpostfächern in Zimbra überprüft. Wenn das Postfach nicht vorhanden ist, wird der Benutzer nicht zur Mailingliste hinzugefügt. Sie können natürlich ein neues Postfach für den Benutzer erstellen und es der Mailingliste hinzufügen, aber ich gehe davon aus, dass Zimbra autoprov im Eager-Modus funktioniert. Wenn der Benutzer nicht automatisch erstellt wurde, hat er im System nichts zu tun
- Temporäre Dateien löschen
- Arbeitsverzeichnis löschen
6. Fazit
Im Allgemeinen war die Aufgabe nicht schwierig, das Problem bestand nur darin, Daten von PowerShell nach Bash zu übertragen. Ich habe lange versucht, ein Tool zum Transkribieren von Textdateien mit PoSh-Ausgabe in eine Bash-verdauliche Form zu finden. Das Ergebnis vieler Tage der Suche war die Funktion:
Rekodierungsfunktion $InputFile = gc File1.txt $OutputFile = "File2.txt" $enc = [system.text.encoding] function ReCode ( $f, $t, $line ) { $cp1 = $enc::getencoding( $f ) $cp2 = $enc::getencoding( $t ) $inputbytes = $enc::convert( $cp1, $cp2, $cp2.getbytes( $line )) $outputstring = $cp2.getstring( $inputbytes ) $outputstring | add-content $OutputFile } foreach ($line in $InputFile) { ReCode -f "windows-1251" -t "utf-8" $line }
Vielleicht ist jemand nützlich.
7. PS:
Dies ist der dritte Artikel in der Reihe „Wie ich Zimbra implementiert habe“. Der erste befasst sich hier mit der Implementierung, der LDAP-Autorisierung und der automatischen Erstellung von Postfächern für AD-Benutzer. Der zweite Abschnitt zum Einrichten der Sicherung und Wiederherstellung von Zimbra in seiner Gesamtheit und in separaten Feldern ist
hier .