Skip to content

Chapitre 9.2: Atelier pratique : Requêtes et informations

⏮️ Chapitre Précédent: Powershell AD - Concepts base | 🏠 Retour au Syllabus | ⏭️ Chapitre Suivant: Powershell AD - Création et Modification


📚 Dans ce chapitre

Apprenez à extraire et analyser les informations de votre Active Directory avec PowerShell.


1. 🔹 Obtenir des informations sur les utilisateurs

Les commandes PowerShell permettent d'extraire rapidement des informations sur les utilisateurs avec différents niveaux de détail.

Découvrir les attributs disponibles

Découvrir les propriétés

Avant de pouvoir rechercher des informations spécifiques, il est important de connaître les propriétés disponibles. Ces propriétés sont disponibles dans l'interface graphique via le menu Propriétés > Editeur d'attributs dans Utilisateurs et groupes d'AD (il faut d'abord activer l'option Fonctionnalités avancées dans le menu principal de Utilisateurs et groupes d'AD).

Commandes de base

Les filtres les plus courants dans PowerShell AD

Voici les opérateurs de filtre les plus utilisés avec les commandes PowerShell pour Active Directory (-Filter), notamment pour Get-ADUser, Get-ADGroup, etc. :

Opérateur Signification Exemple d'utilisation
-eq Égal à {Department -eq "Comptabilité"}
-ne Différent de {Enabled -ne $true}
-like Correspondance avec joker (* ou ?) {Name -like "Mar*"}
-notlike Ne correspond pas au motif {Name -notlike "*test*"}
-gt Supérieur à {WhenCreated -gt $date}
-ge Supérieur ou égal à {WhenCreated -ge $date}
-lt Inférieur à {PasswordLastSet -lt $date}
-le Inférieur ou égal à {PasswordLastSet -le $date}
-and ET logique {Enabled -eq $true -and Department -eq "RH"}
-or OU logique {Department -eq "RH" -or Department -eq "Comptabilité"}
-not Négation { -not (Enabled -eq $true) }

Astuce

  • L'opérateur -like est très utile pour les recherches partielles avec des jokers (* pour plusieurs caractères, ? pour un seul).
  • Les dates doivent être comparées avec des variables de type [datetime] (voir exemples plus bas).
  • Les filtres sont sensibles à la casse des propriétés, mais pas des valeurs.

Exemples rapides :

# Lister tous les utilisateurs (limité aux 10 premiers pour l'exemple)
Get-ADUser -Filter * -ResultSetSize 10

# Obtenir un utilisateur spécifique par son SamAccountName
Get-ADUser -Filter {SamAccountName -eq "victor.vanhoof"}

# Obtenir les utilisateurs dont le nom commence par V (il faut que le nom soit rempli!!)
Get-ADUser -Filter {Name -like "V*"}

# Obtenir un utilisateur avec des propriétés spécifiques
# La propriété 'Department' en PowerShell correspond au champ 'Service' dans l'interface française d'AD
Get-ADUser -Filter {SamAccountName -eq "victor.vanhoof"} -Properties DisplayName, EmailAddress, Department

Exemple pratique : Recherche avancée d'utilisateurs

Changez à la main le pays de quelques utilisateurs vers la Belgique.

# Trouver tous les utilisateurs de la Belgique 
Get-ADUser -Filter {Country -eq "BE"} -Properties Country | 
    Format-Table Name, SamAccountName, Country

Formatage des résultats

Format-Table permet de formatter les résultats de manière lisible, c'est juste une option

Trouver les utilisateurs actifs

Get-ADUser -Filter {Enabled -eq $true} | Format-Table Name

Filtre avec AND : utilisateurs belges ET du service Ventes

# Note: Dans PowerShell, la propriété s'appelle 'Department' (en anglais)
# mais dans l'interface française d'AD, ce champ s'appelle 'Service'
Get-ADUser -Filter {Country -eq "B" -and Department -eq "Ventes"} -Properties Country,Department |
    Format-Table Name, SamAccountName, Country, Department

Exercices pratiques

Exercice 1 : Trouvez tous les utilisateurs dont le nom contient "va" et affichez leur nom complet.

Exercice 2 : Pensez à une recherche utile au niveau de votre Active Directory et exécutez-la.

2. 🔹 Obtenir des informations sur les groupes

Les groupes sont essentiels dans AD pour gérer les permissions. PowerShell permet de les explorer facilement.

Commandes de base

# Lister tous les groupes
Get-ADGroup -Filter *

# Obtenir les membres d'un groupe
Get-ADGroup -Filter {Name -eq "GG-EU-RH-Users"} | ForEach-Object {
    Get-ADGroupMember -Identity $_.DistinguishedName
}

ForEach-Object

ForEach-Object permet de parcourir chaque objet retourné par Get-ADGroup. Le $_ représente l'objet actuel utilisé dans la boucle

# Obtenir les groupes d'un utilisateur
Get-ADUser -Filter {SamAccountName -eq "victor"} | ForEach-Object {
    Get-ADPrincipalGroupMembership -Identity $_.DistinguishedName
}

Exercices sur les groupes

Exercice 1 : Trouvez tous les groupes dont le nom contient le mot "IT".

Exercice 2 : Affichez les membres du groupe "GG-EU-IT-Users". Utilisez Identity car Get-ADGroupMember n'accepte pas le paramètre -Filter.

# Solution: on utilise identity car Get-ADGroupMember n'accepte pas le paramètre -Filter. Certaines commandes ne l'acceptent pas.
Get-ADGroupMember -Identity "GG-EU-IT-Users" | Format-Table Name, SamAccountName

Le paramètre -Identity

Ce paramètre permet de spécifier quel objet AD vous voulez manipuler. Il accepte plusieurs formats d'identification. Par exemple... si on a le groupe "GG-EU-IT-Users", on peut le trouver de plusieurs manières en utilisant le paramètre -Identity :

  • Nom : Simplement le nom du groupe (ex: -Identity "GG-EU-IT-Users")
  • SamAccountName : L'identifiant unique du groupe dans le domaine (ex: -Identity "GG-EU-IT-Users")
  • DistinguishedName : Le chemin complet dans l'AD (ex: -Identity "CN=GG-EU-IT-Users,OU=Groups,OU=EU,DC=computerelectronics,DC=be")
  • GUID : L'identifiant unique global (ex: -Identity "123e4567-e89b-12d3-a456-426614174000")

3. 🔹 Explorer les Unités d'Organisation (OUs)

Les OUs structurent votre Active Directory. PowerShell permet de les explorer et de comprendre leur hiérarchie.

Commandes de base

# Lister toutes les OUs
Get-ADOrganizationalUnit -Filter *

# Lister une OU spécifique
Get-ADOrganizationalUnit -Filter { Name -eq "RH"}

# Trouver un user spécifique par son nom
Get-ADUser -Filter {Country -eq "BE"}

# Obtenir les objets dans une OU spécifique
!!! note "SearchBase obligatoire"

    SearchBase est nécessaire car il définit le point de départ de la recherche
Get-ADObject -Filter * -SearchBase "OU=Users,OU=Comptabilite,OU=EU,DC=computerelectronics,DC=be"

# Compter les utilisateurs dans une OU
!!! note "Limitation de recherche"

    SearchBase est nécessaire pour limiter la recherche à une OU spécifique
(Get-ADUser -Filter * -SearchBase "OU=Users,OU=Comptabilite,OU=EU,DC=computerelectronics,DC=be").Count

4. 🔹 Exportation des données

L'exportation des données est essentielle pour le reporting et l'analyse.

Exportation vers CSV

Sélection d'attributs

Select-Object permet de sélectionner les attributs que l'on souhaite exporter.

Différence Pipeline vs ForEach-Object

Dans PowerShell, il existe deux façons principales de traiter plusieurs objets :

1. Le pipeline (|) : Utilisé pour passer les résultats d'une commande à une autre. Idéal quand la commande suivante accepte des objets en entrée via le pipeline.

2. ForEach-Object : Utilisé quand vous devez exécuter un bloc de code plus complexe pour chaque objet ou quand la commande suivante n'accepte pas d'entrée via le pipeline.

Exemple avec pipeline

# Exemple avec pipeline
Get-ADUser -Filter {Country -eq "BE"} | Select-Object Name, SamAccountName

Exemple avec ForEach-Object

# Exemple avec ForEach-Object
Get-ADGroup -Filter {Name -like "GG-*"} | ForEach-Object {
    # Bloc de code exécuté pour chaque groupe
    Get-ADGroupMember -Identity $_.Name
}

Explication de cet exemple :

  1. Get-ADGroup -Filter {Name -like "GG-*"} : Cette commande recherche tous les groupes AD dont le nom commence par "GG-"
  2. | ForEach-Object { ... } : Pour chaque groupe trouvé, on exécute le bloc de code entre accolades
  3. Get-ADGroupMember -Identity $_.Name : Pour chaque groupe ($_ représente le groupe actuel), on récupère la liste de ses membres

Pourquoi utiliser ForEach-Object ici ? Parce que Get-ADGroupMember n'accepte pas directement des objets du pipeline. Il faut donc traiter chaque groupe individuellement et extraire son nom pour le passer à la commande.

Explication de $_

Dans PowerShell, $_ est une variable spéciale qui représente l'objet actuel dans le pipeline. Quand vous utilisez ForEach-Object, $_ fait référence à chaque objet qui est traité un par un. Par exemple, dans $_.Name, le $_ représente un groupe AD et .Name accède à la propriété "Name" de ce groupe.

# Exemple d'exportation avec pipeline
# Exporter la liste des utilisateurs vers un fichier CSV
# Note: 'Department' (propriété PowerShell) = 'Service' (interface française d'AD)
Get-ADUser -Filter * -Properties Department, Title, EmailAddress |
    Select-Object Name, SamAccountName, Department, Title, EmailAddress |
    Export-Csv -Path "C:\utilisateurs.csv" -NoTypeInformation -Encoding UTF8

Exportation au format HTML (pour visualisation dans un navigateur)

# Exporter vers un fichier HTML (plus visuel qu'un CSV)
# Note: 'Department' (propriété PowerShell) = 'Service' (interface française d'AD)
Get-ADUser -Filter * -Properties Department, Title | 
    Select-Object Name, SamAccountName, Department, Title |
    ConvertTo-Html -Title "Liste des utilisateurs" -Property Name, SamAccountName, Country |
    Out-File -FilePath "C:\utilisateurs.html" -Encoding UTF8

# Ouvrir le fichier HTML dans le navigateur par défaut
Invoke-Item "C:\utilisateurs.html"

Exercice final

Exportez la liste de tous les groupes et leurs membres dans un fichier CSV.


⏮️ Chapitre Précédent: Powershell AD - Concepts base | 🏠 Retour au Syllabus | ⏭️ Chapitre Suivant: Powershell AD - Création et Modification


📚 Cours Active Directory - PowerShell | 👨‍💻 Pour débutants