Sommaire
ToggleCet article a pour but de vous expliquer comment gérer un annuaire Active Directory avec PowerShell et plus précisément avec le module Quest ActiveRoles Management Shell.
Présentation de PowerShell
- PowerShell s’appuie sur les classes d’objets du .Net Framework. En fait les commandes PowerShell (CMDLET) sont des classes .Net Framework simplifiées.
- PowerShell est extensible (modules). Tout nouveau logiciel Microsoft est fourni avec un module d’administration PowerShell.
- Les commandes PowerShell sont toujours sous la forme ACTION-OBJET et sont relativement claires.
Exemples d’actions : Add, Export, Get, New, Out, Remove, Select, Set, Start, Stop, Test, Where…
Exemples d’objet : ChildItem, content, alias, file, object, QADObject, QADuser, string…
La commande Get-Content permet par exemple de lire le contenu d’un fichier.
- PowerShell permet de chainer les commandes. La commande ci-dessous permet par exemple de désactiver tous les comptes utilisateurs qui se trouvent dans l’OU Utilisateurs :
Get-QADUser -SearchRoot "OU=Utilisateurs,DC=TPHAT,DC=INTRA" | Disable-QADUser
- PowerShell permet d’utiliser les classes WMI / .Net Framework ceux qui étend encore les possibilités de l’outil.
- PowerShell est un langage de développement / scripting orienté objet. Une commande PowerShell renvoie un objet. Il est possible de filtrer les attributs avec la commande Select-Object.
La commande ci-dessous permet par exemple d’afficher les attributs SamAccountName, Description, Company de tous les comptes utilisateurs de l’OU Utilisateurs du domaine TPHAT.INTRA :
Get-QADUser -SearchRoot "OU=Utilisateurs,DC=TPHAT,DC=INTRA" | Select-Object SamAccountName,Description,Company
PowerShell renvoie le résultat suivant :
SamAccountName Description Company
-------------- ----------- -------
guillaume.mathieu Compte utilisateur Metsys
tigrou.mathieu Compte utilisateur Metsys
melanie.mathieu Compte utilisateur Metsys
- PowerShell prend aussi en charge les boucles conditionnelles, les variables. Pour plus d’informations, je vous invite à lire les articles suivants :
- PowerShell gère l’auto-complexion à l’aide de la touche TAB. Si je tape Get- et que j’appuie sur la touche TAB, toutes les commandes contenant Get- s’affichent comme Get-QADuser.
Les commandes indispensables à connaître
Pour afficher l’aide d’une commande
Pour afficher les explications complètes de la commande Get-QADuser :
Get-Help Get-QADuser -full
Pour afficher des exemples d’utilisation de la commande Get-QADuser :
Get-Help Get-QADuser -examples
Pour filtrer l’affichage du commande
PowerShell permet d’afficher le résultat d’une commande sous forme :
- D’un tableau avec la commande : Format-Table
- D’une liste avec la commande : Format-List
La commande suivante permet par exemple d’afficher toutes les propriétés du compte utilisateur melanie.mathieu sous forme d’une liste :
Get-QADUser -IncludeAllProperties -Identity melanie.mathieu | Format-List *
Pour exporter la liste de tous les utilisateurs de l’OU Utilisateurs
La commande Export-CSV permet d’exporter les résultats d’une commande PowerShell sous forme de fichier CSV. Attention, il faut utiliser PowerShell V2 pour pouvoir spécifier le type de séparateur avec le paramètre -UseCulture. Toujours spécifier le format de fichier UTF8 pour la prise en charge des accents.
Get-QADUser -SearchRoot "OU=Utilisateurs,DC=TPHAT,DC=INTRA" | Select-Object SamAccountName,Description,Company | Export-Csv -Path c:resultat.csv -UseCulture -Encoding UTF8
Administrer l’annuaire Active Directory avec l’outil Quest ActiveRoles Management Shell :
Présentation de l’outil Quest ActiveRoles Management Shell
Il s’agit d’un module PowerShell (gratuit) qui permet de gérer un annuaire Active Directory.
Lancer ActiveRoles Management Shell et taper la commande Get-PSSnapin.
PowerShell renvoie la liste des modules PowerShell :
Name : Microsoft.PowerShell.Diagnostics
PSVersion : 2.0
Description : This Windows PowerShell …
Name : Quest.ActiveRoles.ADManagement
PSVersion : 1.0
Description : This Windows PowerShell snap-in contains cmdlets to manage Active Directory…
La console ActiveRoles Management Shell est en fait une console PowerShell avec le module Quest.ActiveRoles.ADManagement préchargé.
Si vous le souhaitez, vous pouvez aussi lancer une invite PowerShell et charger le module PowerShell Quest manuellement en tapant la commande suivante :
Add-PSSnapin Quest.ActiveRoles.ADManagement
Pour lister des comptes utilisateurs
Pour lister tous les comptes utilisateurs d’une OU et afficher uniquement les champs SamAccountName (login) et LastlogonTimeStamp (date de dernier login) et exporter le résultat sous forme d’un fichier CSV :
Get-QADUser -SearchRoot "OU=Utilisateurs,DC=TPHAT,DC=INTRA" | Select-Object SamAccountName, LastLogonTimeStamp | Export-Csv -Path c:resultat.csv -UseCulture -Encoding UTF8
Utiliser le paramètre -IncludeAllProperties pour afficher tous les attributs d’un compte utilisateur avec la commande PowerShell.
Pour trouver le nom de l’attributs, créer un compte utilisateur (guillaume.mathieu) et compléter les champs requis puis taper la commande suivante :
Get-QADUser -IncludeAllProperties -Identity guillaume.mathieu | Format-List -Property *
Pour lister les comptes utilisateurs en fonction d’une valeur :
Afficher que les comptes utilisateurs avec une description avec la valeur Metsys :
Get-QADuser -Description "Compte utilisateur"
Pour certains attributs, il est cependant obligatoire d’utiliser la commande Where-Object qui permet de filtrer les résultats.
$_.EmployeeType signifie la valeur de l’attribut EmployeeType de l’objet Utilisateur que la commande Get-QADuser sort en résultat.
Il est possible de filtrer sur plusieurs conditions. N’oublier pas les parenthèses dans ce cas !
Get-QADuser -IncludeAllProperties | Where-object {($_.EmployeeType -match "Employee") -AND ($_.Description -match "Compte")}
Script pour importer des comptes utilisateurs à partir d’un fichier CSV
Pour cela, on va utiliser la commande Import-Csv et utiliser la commande foreach .
Il est possible d’exécuter des scripts PowerShell. Par défaut l’exécution de script non signé est interdite.
Pour l’autoriser, il faut taper la commande suivante :
Set-ExecutionPolicy Unrestricted
Créer un fichier Excel avec la liste des utilisateurs appelé c:base.csv avec les colonnes suivantes :
Name ;SamAccountName (pour le login),FistName (pour le prénom), LastName (pour le nom de famille), Password (pour le mot de passe).
Créer le fichier avec NOTEPAD et l’enregistrer au format UTF8. Par défaut Notepad enregistre en ANSI. Dans le cas contraire, les accents ne seront pas correctement pris en compte.
Exemple de fichiers CSV :
Name;SamAccountName;FistName;LastName;Password
Guillaume Mathieu Test;gmmathieutest;Guillaume;Mathieu Test;P@ssword
Amélie Mathieu Test;amathieutest;Amélie;Mathieu Test;P@ssword
Créer un fichier texte appelé import.ps1 et copier le contenu du script suivant :
$users = Import-csv -path c:base.csv -UseCulture
foreach ($user in $users)
{
New-QADuser -Name $($user.name) -SamAccountName $($user.SamAccountName) -FirstName $($user.FirstName) -LastName $($user.LastName) –UserPassword $($user.Password) –ParentContainer "OU=Utilisateurs,DC=TPHAT,DC=INTRA"
}
Pour modifier la valeur d’un utilisateur
Dans l’exemple ci-dessous, on définit la valeur du champ société à Metsys pour le compte guillaume.mathieu :
Get-QADUser -Identity guillaume.mathieu | Set-QADUser -Company Metsys
Il est possible de faire cette action sur plusieurs comptes en définissant une OU :
Get-QADUser -SearchRoot "Ou=Utilisateurs,DC=tphat,dc=intra" | Set-QADUser -Company Metsys
Pour gérer des groupes
La commande Get-QADGroupMember -Identity AI_Avant-Vente_RO –Indirect permet d’afficher les membres directes et indirectes (groupes dans des groupes) d’un groupe.
Pour supprimer un objet (groupe / compte utilisateur)
Get-QADUser -SearchRoot "Ou=Utilisateurs,DC=tphat,dc=intra" | Remove-QADObject –Force
Les exemples de code / pour en savoir plus
Le script Center de Microsoft dispose de nombreux script PowerShell en libre téléchargement.
Ce dernier est accessible à l’adresse suivante :
http://technet.microsoft.com/en-us/scriptcenter/bb410849.aspx