Quand il s’agit de déployer une organisation complète dans un annuaire Active Directory (OU, Groupes, délégations, etc.), il est souvent impensable de faire ça à la main dans la console d’administration AD de la MMC ou autre navigateur LDAP. Et à moins d’embaucher des chinois dans un cave, pour créer les quelques centaines d’objets dans AD, la solution passe généralement par un script.
Oui mais voilà, généralement on créé des structures relativement identiques, et si on pouvais disposer d’un script suffisamment générique pour créer tout ça ?
Eh bien oui c’est possible, voilà donc un script PowerShell à base de PS 2.0, qui reçoit en entrée un fichier texte décrivant les opérations à faire dans l’annuaire AD de son choix. Ce script m’a été inspiré par un script VBS que j’ai eu l’occasion d’utiliser il y a bientôt deux ans dans un grand groupe international, merci à l’auteur de ce premier script dont j’ai malheureusement complétement oublié le nom Oo.
J’ai créé une page dédiée à ce script, n’hésitez pas à l’utiliser et à me faire part de vos remarques ^^
La page du script ADInit : ADInit
La page de téléchargement : ADInit Download
Lorsque l’on utilise PowerShell pour créer des objets dans ActiveDirectory, il peut être intéressant dans le cas d’une OU ou d’un container d’appliquer le paramètres de Protection de l’objet des suppressions accidentelles, comme le fait si bien la case à cocher disponible dans la MMC.
Bon, une case à cocher c’est très bien, mais quand on viens de faire un joli script qui nous créé en une seule passe les 150 OU de notre organisation AD, quand viens le moment de cocher 150 cases il viens comme une envie de se pendre (surtout qu’avant d’atteindre la case à cocher il aura fallu malmener sérieusement le clic gauche de la souris -_-)
En réalité, derrière cette case à cocher se cache trois ACE très simples, l’octroi du refus pour le groupe Builtin « Tout le monde » sur l’objet en question:
Maintenant il ne me reste plus qu’à vous montrer comment appliquer des ACE sur un objet de l’AD avec un script PowerShell.
Lorsque l’on écrit un script PowerShell il y a toujours un moment où l’on préfèrera demander une authentification utilisateur par prompt plutôt que de mettre un mot de passe en dur dans le code (sisi c’est mieux
)
Sauf que lorsque l’on veut demander un mot de passe à l’utilisateur il n’y a pas dix mille façon de le faire proprement : il faut le stocker dans une chaîne de type System.Security.SecureString
Ok… C’est super… Mais comment faire pour ensuite donner ce mot de passe en paramètre à des fonctions ou actions puisque le contenu de ce chaîne est haché ?
Et bien pour effectuer un reverse du hash il existe une classe : System.Runtime.InteropServices.Marshal
Microsoft fournit des Cmdlets Powershell permettant d’exporter et d’importer la configuration d’un serveur FIM Service. Ces commandes sont inclus dans le module FIM Automation pour Powershell et sont fort utile pour : sauvegarder la configuration, restaurer la configuration, migrer la configuration, ou encore exporter et importer des ressources dans le portail FIM.
Les Cmdlets disponibles sont les suivants :
| Compare-FIMConfig | : Compare les attributs de ressources FIM et retourne une liste des changements à effectuer. |
| ConvertFrom-FIMResource | : Sérialise une ressource FIM et l’exporte sous forme d’un fichier XML (converti une ressource en XML). |
| ConvertTo-FIMResource | : Désérialise une ressource FIM depuis un fichier XML donné (converti des données XML en une ressource). |
| Export-FIMConfig | : Exporte les ressources FIM de configuration depuis FIM Service (appel au Web Service FIM). |
| Import-FIMConfig | : Importe une liste de changement dans FIM Service en utilisant le Web Service. |
| Join-FIMConfig | : Joint deux listes d’objets de type ressource FIM en utilisant un ou plusieurs critères de rapprochement. |
Grâce à ces Cmdlets il est possible de faire une sauvegarde de la configuration de FIM Service ou de restaurer cette configuration. Il est possible également de migrer la configuration d’un serveur vers un autre, par exemple pour appliquer des changements effectués sur un serveur de développement sur un serveur de production.
Vous trouverez des exemples de script que j’ai écrit sur la page code source de ce site. Notamment les scripts s’inspirant des exemples du Technet et s’intitulant : Backup-FIM-Configuration et Restore-FIM-Configuration
Vous trouverez également de nombreux exemples sur les différents liens du technet et sur la FIM Scriptbox du Forum FIM :
Carol Wapshere, connue aussi sous le nom de Miss MIIS, à publier sur son blog un article très intéressant sur une activité de workflow permettant d’invoquer des scripts Powershell. Ces scripts peuvent être exécutés localement ou sur des machines distantes, ce qui donne des possibilités vraiment énormes en terme de personnalisation !
Plus d’info sur le site de Carol : Lire l’article