
1. Quelques mots de l'auteur
Article mis à jour. Les scripts ont changé. Script ajouté pour mettre à jour une liste de diffusion.Dans les commentaires du dernier article, on m'a posé une question intéressante sur la formation automatique de listes de diffusion basées sur des groupes de sécurité AD. Il y a un problème - il y a une solution. Alors allons-y.
2. Les données source
Système d'exploitation du serveur : CentOS 7
À propos de l'OSEn fait, la différence entre CentOS7 et tout autre système réside uniquement dans les commandes au serveur pour installer les packages et, éventuellement, l'emplacement de certains fichiers. Le travail est effectué principalement avec les applets de commande Zimbra, de sorte que les différences de configuration seront minimes.
Domaine Zimbra : zimbramail.home.local
Le chemin pour monter les boules sur l'hôte Zimbra : / mnt / ZM /
3. Configuration
- Nous montons la boule Windows sur notre serveur Linux. Il s'agit de simplifier et d'automatiser le transfert de données de Windows PowerShell vers Linux Bash. La procédure de montage a été décrite dans un article précédent. Je ne vais pas me répéter.
- Nous créons une unité d'organisation distincte dans AD, dans laquelle nous créons des groupes sur la base des listes de diffusion qui seront créées dans Zimbra. Nom du groupe = nom de la liste de distribution.
- Nous ajoutons aux groupes créés dans la nouvelle unité d'organisation, les utilisateurs ou les groupes de sécurité, sur la base desquels les listes de diffusion dans Zimbra seront remplies. Le script s'exécute récursivement, ce qui signifie qu'il va collecter toutes les données sur les utilisateurs qui sont dans des groupes qui sont ajoutés aux groupes dans l'unité d'organisation cible. En savoir plus sur la sortie de la commande Get-ADGroupMember .
- Créez un script pour collecter des données depuis Active Directory.
- Nous créons un script pour ajouter des listes de diffusion et les remplir par les utilisateurs en fonction des données reçues dans le script précédent.
- Profitez-en.
3.1. À propos de OU
J'ai créé l'unité d'organisation «ZimbraDL» à la racine du domaine et l'ai empêché d'hériter des stratégies de groupe afin que ces groupes restent séparés. Ils ne participeront en aucune façon à la vie du domaine, à l'exception de la formation de listes de distribution dans la Zimbra Collaboration OSE.
4. Script PowerShell pour collecter des données depuis AD
Script PowerShell$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. Comment fonctionne le script
- Tout d'abord, il vérifie l'existence et la suppression du répertoire de travail, s'il existe. Cela est nécessaire pour que les données ne doublent pas dans le processus.
- PoSh examine l'unité d'organisation spécifiée, lit les groupes d'utilisateurs qui s'y trouvent et les écrit dans le fichier GetGroupsAD.txt
- Supprime tout ce qui est superflu du fichier reçu (PoSh écrit toute sa sortie dans le fichier, donc dans la sortie initiale de la commande, la première ligne est Nom, la deuxième ligne est le séparateur "----", et seulement après que les groupes sont répertoriés un par un), change l'encodage de "windows-1251" à utf-8, résultant en un autre fichier GroupsList.txt
- En outre, sur la base du fichier reçu, des informations sur les utilisateurs des groupes contenus dans le fichier sont lues. Fichiers contenant des noms d'utilisateur (samAccountName)
placé dans le répertoire \ Users et appelé par nom de groupe
4.2. Script pour lire les informations d'un seul groupe
Un script avec la possibilité de lire les données d'un seul groupe de sécurité n'est pas très différent du précédent, essentiellement parce qu'il a un bloc demandant à l'utilisateur d'entrer le nom du groupe, sur la base duquel la liste de diffusion devra être mise à jour.
Script PowerShell à exécuter à la main avec la possibilité de lire les données d'un seul groupe $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. Script Bash pour créer des listes de diffusion
Je ferai une réservation sur la copie des fichiers de script créés sous WindowsDans un article précédent, nous avons décrit une méthode de formatage de fichiers à l'aide de la commande cat, qui, lorsqu'elle est lancée avec une clé spécifique, supprime tous les caractères illisibles inutiles. Lien vers l'article à la fin de l'article.
5.1. Comment fonctionne le script
- Écrire une liste de groupes dans un fichier
- Vérifier l'existence de la liste de diffusion dans Zimbra; si elle existe, supprimez-la
- Créez des listes de diffusion une par une en fonction de la liste des groupes, en remplissant chacun d'eux avec des utilisateurs (l'ID de la liste de distribution s'affiche à l'écran, il s'agit de la sortie standard de la cmdlet zmprov lors de la création de DL). Cela vérifie l'existence de boîtes aux lettres d'utilisateur dans Zimbra, et si la boîte aux lettres n'existe pas, l'utilisateur ne sera pas ajouté à la liste de diffusion. Vous pouvez, bien sûr, créer une nouvelle boîte aux lettres pour l'utilisateur et l'ajouter à la liste de diffusion, mais je suppose que Zimbra autoprov fonctionne en mode Désireux, et si l'utilisateur n'a pas été créé automatiquement, alors il n'a rien à faire dans le système
- Effacer les fichiers temporaires
- Supprimer le répertoire de travail
6. Conclusion
En général, la tâche n'était pas difficile, le problème était uniquement lié au transfert de données de PowerShell vers Bash. Pendant longtemps, j'ai essayé de trouver un outil pour transcrire des fichiers texte avec une sortie PoSh sous une forme digestible Bash. Le résultat de plusieurs jours de recherche a été la fonction:
Fonction de recodage $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 }
Peut-être que quelqu'un sera utile.
7. PS:
Ceci est le troisième article de la série «Comment j'ai implémenté Zimbra». Le premier concerne l'implémentation, l'autorisation LDAP et la création automatique de boîtes aux lettres pour les utilisateurs AD,
ici . Le second, sur la configuration de la sauvegarde et de la récupération de Zimbra dans son intégralité et dans des boîtes séparées, est
ici .