🪟 Inventaire Active Directory
Users, groupes, GPO, ordinateurs, comptes désactivés
Inventaire Active Directory
Script PowerShell pour exporter un inventaire complet de votre domaine Active Directory.
Prérequis
- Module RSAT ActiveDirectory (
Install-WindowsFeature RSAT-AD-PowerShell) - Droits lecteur domaine minimum
Script
#Requires -Module ActiveDirectory
inventaire-ad.ps1 — Inventaire complet Active Directory
Usage : .\inventaire-ad.ps1 [-OutputPath "C:\Rapports"]
param(
[string]$OutputPath = ".",
[string]$Domain = (Get-ADDomain).DNSRoot
)
$Date = Get-Date -Format "yyyyMMdd-HHmm"
$ReportDir = Join-Path $OutputPath "AD-Inventaire-$Date"
New-Item -ItemType Directory -Path $ReportDir -Force | Out-Null
Write-Host "Inventaire AD — $Domain — $Date" -ForegroundColor Cyan
── Utilisateurs ─────────────────────────────────────────────────────────────
Write-Host "`n[1/5] Export utilisateurs..." -ForegroundColor Yellow
$Users = Get-ADUser -Filter * -Properties `
DisplayName, EmailAddress, Department, Title, Manager,
LastLogonDate, PasswordLastSet, PasswordExpired, PasswordNeverExpires,
Enabled, Created, LockedOut, MemberOf |
Select-Object SamAccountName, DisplayName, EmailAddress, Department, Title,
@{N="Manager";E={($_.Manager -split ',')[0] -replace 'CN=',''}},
@{N="LastLogon";E={$_.LastLogonDate}},
@{N="PwdLastSet";E={$_.PasswordLastSet}},
PasswordExpired, PasswordNeverExpires, Enabled, Created, LockedOut
$Users | Export-Csv "$ReportDir\utilisateurs.csv" -NoTypeInformation -Encoding UTF8
Write-Host " → $($Users.Count) utilisateurs exportés"
Comptes à risque
$DisabledWithGroups = $Users | Where-Object { -not $_.Enabled }
$NeverExpire = $Users | Where-Object { $_.PasswordNeverExpires -and $_.Enabled }
$StaleAccounts = $Users | Where-Object { $_.Enabled -and $_.LastLogon -lt (Get-Date).AddDays(-90) -and $_.LastLogon -ne $null }
$LockedAccounts = $Users | Where-Object { $_.LockedOut }
── Groupes ───────────────────────────────────────────────────────────────────
Write-Host "[2/5] Export groupes..." -ForegroundColor Yellow
$Groups = Get-ADGroup -Filter * -Properties Description, Members, ManagedBy, GroupScope, GroupCategory |
Select-Object Name, SamAccountName, Description, GroupScope, GroupCategory,
@{N="ManagedBy";E={($_.ManagedBy -split ',')[0] -replace 'CN=',''}},
@{N="MemberCount";E={$_.Members.Count}}
$Groups | Export-Csv "$ReportDir\groupes.csv" -NoTypeInformation -Encoding UTF8
Write-Host " → $($Groups.Count) groupes exportés"
── Ordinateurs ───────────────────────────────────────────────────────────────
Write-Host "[3/5] Export ordinateurs..." -ForegroundColor Yellow
$Computers = Get-ADComputer -Filter * -Properties OperatingSystem, OperatingSystemVersion,
LastLogonDate, Created, Enabled, IPv4Address |
Select-Object Name, DNSHostName, OperatingSystem, OperatingSystemVersion,
@{N="LastLogon";E={$_.LastLogonDate}}, Created, Enabled, IPv4Address
$Computers | Export-Csv "$ReportDir\ordinateurs.csv" -NoTypeInformation -Encoding UTF8
Write-Host " → $($Computers.Count) ordinateurs exportés"
── GPO ───────────────────────────────────────────────────────────────────────
Write-Host "[4/5] Export GPO..." -ForegroundColor Yellow
try {
Import-Module GroupPolicy -ErrorAction Stop
$GPOs = Get-GPO -All | Select-Object DisplayName, GpoStatus, CreationTime, ModificationTime,
@{N="WmiFilter";E={$_.WmiFilter.Name}},
@{N="ComputerEnabled";E={$_.Computer.Enabled}},
@{N="UserEnabled";E={$_.User.Enabled}}
$GPOs | Export-Csv "$ReportDir\gpo.csv" -NoTypeInformation -Encoding UTF8
Write-Host " → $($GPOs.Count) GPO exportées"
} catch {
Write-Host " Module GroupPolicy non disponible — GPO ignorées" -ForegroundColor DarkYellow
}
── Rapport synthèse ──────────────────────────────────────────────────────────
Write-Host "[5/5] Génération rapport synthèse..." -ForegroundColor Yellow
$Report = @"
Rapport Inventaire Active Directory
Domaine : $Domain
Date : $(Get-Date -Format "dd/MM/yyyy HH:mm")
Généré par : $($env:USERNAME) sur $($env:COMPUTERNAME)
Résumé
Catégorie Total Utilisateurs $($Users.Count) Utilisateurs actifs $($Users.Where({$_.Enabled}).Count) Utilisateurs désactivés $($DisabledWithGroups.Count) Comptes verrouillés $($LockedAccounts.Count) Mot de passe n'expire jamais $($NeverExpire.Count) Comptes inactifs (>90j) $($StaleAccounts.Count) Groupes $($Groups.Count) Ordinateurs $($Computers.Count)
## Points d'attention
$(if($LockedAccounts.Count -gt 0){"⚠️ $($LockedAccounts.Count) compte(s) verrouillé(s) : $($LockedAccounts.SamAccountName -join ', ')`n"})
$(if($NeverExpire.Count -gt 0){"⚠️ $($NeverExpire.Count) compte(s) avec mot de passe n'expirant jamais`n"})
$(if($StaleAccounts.Count -gt 0){"⚠️ $($StaleAccounts.Count) compte(s) inactif(s) depuis plus de 90 jours`n"})
Fichiers générés
- utilisateurs.csv
- groupes.csv
- ordinateurs.csv
- gpo.csv (si module disponible)
"@
$Report | Out-File "$ReportDir\RAPPORT.md" -Encoding UTF8
Write-Host "`nRapport généré dans : $ReportDir" -ForegroundColor Green
Utilisation
# Exécution basique
.\inventaire-ad.ps1
Avec chemin de sortie personnalisé
.\inventaire-ad.ps1 -OutputPath "C:\Rapports\AD"
Ouvrir le dossier résultat automatiquement
.\inventaire-ad.ps1 && explorer $ReportDir
Plus de 40 outils AdminSys gratuits · SSL · DNS · Docker · Nginx · SSH · Mermaid · et plus