Administrer Active Directory avec PowerShell

Salut à tous.

Cet 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.

1. 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                      PROSERVIA
tigrou.mathieu                          Compte utilisateur                      PROSERVIA
melanie.mathieu                         Compte utilisateur                      PROSERVIA
- PowerShell prend aussi  en charge les boucles conditionnelles, les variables. Pour plus d’informations, je vous invite à lire les articles suivants :
http://www.computerperformance.co.uk/powershell/powershell_if_statement.htm
http://technet.microsoft.com/en-us/library/ee692804.aspx
http://www.powershellpro.com/powershell-tutorial-introduction/variables-arrays-hashes/
-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.

2. Les commandes indispensables à connaître :
2.1 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

2.2 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 *

2.3 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

3. Administrer l’annuaire Active Directory avec l’outil Quest ActiveRoles Management Shell :
3.1 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

3.2 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 PROSERVIA :
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 »)}

3.3 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 »
}

3.4 Pour modifier la valeur d’un utilisateur :
Dans l’exemple ci-dessous, on définit la valeur du champ société à Proservia pour le compte guillaume.mathieu
Get-QADUser -Identity guillaume.mathieu | Set-QADUser -Company Proservia
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 Proservia

3.5 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. 
3.6 Pour supprimer un objet (groupe / compte utilisateur) :
Get-QADUser -SearchRoot « Ou=Utilisateurs,DC=tphat,dc=intra » | Remove-QADObject –Force

4. 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

A+
Guillaume MATHIEU
Consultant PROSERVIA
La connaissance s’accroît quand on la partage.

À propos de Guillaume Mathieu

Consultant - Formateur chez PROSERVIA (Pôle Conseil Expertise)
Ce contenu a été publié dans Active Directory, ActiveRoles for Server, Annuaire, Outils, PowerShell, Scripts, Windows 2000 Server, Windows 2003 Server, Windows Server 2008, Windows Server 2008 R2, avec comme mot(s)-clef(s) , . Vous pouvez le mettre en favoris avec ce permalien.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

*


9 + huit =

Vous pouvez utiliser ces balises et attributs HTML : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>