Microsoft fait tout ce qui est en son pouvoir pour que PowerShell devienne le choix des utilisateurs et des auteurs d'automatismes du monde entier. L'époque où il fallait compiler du code en .NET pour faire la même chose est révolue. Désormais, il suffit d'utiliser notepad.exe et google. Nous en sommes de grands fans au bureau, d'autant plus que la console de gestion d'Exchange 2007 n'inclut PAS tout ce qu'il est possible de faire avec PowerShell. Microsoft a délibérément omis d'implémenter des choses qui ne sont faites qu'une fois de temps en temps, plus faciles à développer de cette façon, ce qui force carrément son utilisation si vous avez quoi que ce soit qui ressemble à un environnement complexe.
La gestion de la nouvelle génération de produits Microsoft (Win7, Windows Server 2008, Exchange 2007/2010, SQL Server 2008) dispose de crochets PowerShell très riches. Une fois que Remote Powershell (PowerShell 2.0 IIRC) sera déployé avec Server 2008 R2, il deviendra encore PLUS utile pour les auteurs d'automatisation.
Ce que nous en avons fait :
- Créer une page web pour déléguer certaines tâches administratives aux utilisateurs du service d'assistance. La page web déclenche des commandes qui sont exécutées dans PowerShell. Ce qu'elle fait :
- Créer et supprimer des comptes d'utilisateurs, y compris provisionner des boîtes aux lettres et des répertoires personnels Exchange 2007
- Débloque les comptes verrouillés
- Créer/supprimer des groupes
- Ajouter/supprimer des utilisateurs des groupes
- Déplacer des utilisateurs entre les magasins de courrier
- Définir les mots de passe
- Extraire des données du système ERP et intégrer les données du carnet d'adresses mondial dans l'Active Directory chaque nuit.
- Résoudre le problème LegacyExchangeDN qui s'est présenté lors de notre migration Exchange 2003 vers Exchange 2007. Nous avons dû ajouter une adresse X500 à tous les utilisateurs d'Exchange 2003. Un script PowerShell script assez court a permis de résoudre le problème.
- Création scriptée de "boîtes aux lettres de groupe" (boîtes aux lettres partagées dans Exchange où plusieurs utilisateurs ont accès à la boîte aux lettres), un processus par ailleurs manuel en raison de la nature des données dont nous avons besoin avant de le lancer. La configuration de ces boîtes aux lettres s'en est trouvée grandement standardisée.
- Création d'un script qui parcourt toutes les machines du domaine en réinitialisant une clé de registre spécifique et en redémarrant un service. Cela a pris 18 heures, mais le travail a été fait.
Alors oui, PowerShell va nous accompagner pendant un certain temps.
EDIT : Ajout d'un exemple de code, puisque cela a été demandé
$list=import-csv("groupusers.csv")
$lastseengroup=$list\[0\].group
$ADGroupPrefix="grp.netware."
$ADGroupSuffix="{redacted -- in the format of ,ou=groups,dc=domain,dc=domain,dc=domain}"
Clear-Variable memberlist
Clear-Variable unknownusers
foreach ($entry in $list) {
if ($($entry.group) -ne $lastseengroup) {
echo "stumbled across new group $($entry.group), committing changes to $lastseengroup"
$newgroup=$ADgroupPrefix+$lastseengroup
$newgroupdn='"'+"cn=$newgroup$ADGroupSuffix"+'"'
echo "getting DN for $newgroup"
$existinggroup=dsquery group domainroot -name $newgroup
if (($existinggroup -ne $null)) {
dsmod group $newgroupdn -chmbr $memberlist
} else {
dsadd group $newgroupdn -scope u -secgrp yes -members $memberlist -desc "Group imported from eDirectory"
}
Clear-Variable memberlist
}
$User=get-user $($entry.member) -ErrorAction SilentlyContinue
if ($User.isvalid) {
$UserDN=$User.distinguishedname
$memberlist=$memberlist+'"'+"$UserDN"+'" '
} else {
$unknownusers=$unknownusers+$($entry.member)
}
$lastseengroup=$($entry.group)
}
dsadd group "cn=$ADGroupPrefix$lastseengroup$ADGroupSuffix" -scope u -secgrp yes -members $memberlist
Ceci prend un fichier CSV créé avec un script perl script et met à jour un ensemble de groupes. Si le groupe existe déjà, il remplace les membres par ceux spécifiés dans le fichier. Si le groupe n'existe pas, il le crée. Il s'agit d'une synchronisation à sens unique. De plus, il ne faut pas tout à fait encore en production, mais elle est proche de l'être.