Export et rapports AD
L'un des cas d'usage les plus fréquents en entreprise : générer des rapports AD pour les audits de sécurité, les départs d'employés, ou les inventaires de comptes. PowerShell rend ces tâches reproductibles en quelques lignes.
Rapport des comptes inactifs
# Comptes non connectés depuis 60 jours (actifs uniquement)
$seuil = (Get-Date).AddDays(-60)
Get-ADUser -Filter * -Properties LastLogonDate, Department, Manager |
Where-Object { $_.Enabled -eq $true -and ($_.LastLogonDate -lt $seuil -or $null -eq $_.LastLogonDate) } |
Select-Object @{N='Nom';E={$_.Name}},
@{N='Login';E={$_.SamAccountName}},
@{N='Département';E={$_.Department}},
@{N='Dernière connexion';E={$_.LastLogonDate}} |
Export-Csv -Path C:\Audit\comptes-inactifs.csv -NoTypeInformation -Encoding UTF8
Write-Host "Rapport généré : C:\Audit\comptes-inactifs.csv"
Rapport des membres d'un groupe sensible
# Membres directs et imbriqués des Domain Admins
Get-ADGroupMember -Identity "Domain Admins" -Recursive |
Where-Object { $_.objectClass -eq 'user' } |
ForEach-Object {
Get-ADUser $_.SamAccountName -Properties LastLogonDate, Enabled
} |
Select-Object Name, SamAccountName, Enabled, LastLogonDate |
Export-Csv -Path C:\Audit\domain-admins.csv -NoTypeInformation
Inventaire des ordinateurs du domaine
Get-ADComputer -Filter * -Properties OperatingSystem, LastLogonDate, IPv4Address |
Select-Object Name, OperatingSystem, LastLogonDate, IPv4Address |
Sort-Object LastLogonDate -Descending |
Export-Csv -Path C:\Audit\inventaire-postes.csv -NoTypeInformation -Encoding UTF8
Cas concret : automatiser l'offboarding
function Disable-EmployeeAccount {
param([string]$Login, [string]$Raison)
$user = Get-ADUser -Identity $Login -Properties MemberOf
if ($null -eq $user) { Write-Error "Utilisateur $Login introuvable"; return }
# Désactiver le compte
Disable-ADAccount -Identity $Login
# Retirer de tous les groupes sauf Domain Users
$user.MemberOf | ForEach-Object {
Remove-ADGroupMember -Identity $_ -Members $Login -Confirm:$false
}
# Déplacer vers l'OU Désactivés
Move-ADObject -Identity $user.DistinguishedName -TargetPath "OU=Désactivés,DC=domaine,DC=local"
Write-Host "Compte $Login désactivé et déplacé. Raison : $Raison"
}
# Utilisation
Disable-EmployeeAccount -Login "jmartin" -Raison "Départ volontaire 2026-06-30"
Erreurs fréquentes
Export-Csvsans-Encoding UTF8: les caractères accentués (é, è, ç) s'affichent mal dans Excel sans l'encodage correct.-Filter *sur un grand domaine : sur un domaine avec 50 000 utilisateurs,Get-ADUser -Filter *peut prendre plusieurs minutes. Utilisez des filtres plus précis en production.- Ne pas tester avec
-WhatIf:Remove-ADGroupMemberetDisable-ADAccountn'ont pas de retour en arrière simple. Testez toujours en environnement de pré-prod.
À retenir
Export-Csv -Encoding UTF8 -NoTypeInformation→ format propre, lisible dans Excel.- Utiliser
@{N='Nom';E={expression}}pour nommer les colonnes de façon claire. Get-ADGroupMember -Recursive→ inclut les membres des groupes imbriqués.- Encapsuler les procédures répétitives (offboarding) dans des fonctions.