tools.rdr-it.comScriptsInventaire Active Directory

🪟 Inventaire Active Directory

Users, groupes, GPO, ordinateurs, comptes désactivés

powershellScript

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égorieTotal
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
🔧 Ouvrir tools.rdr-it.com — application complète →

Plus de 40 outils AdminSys gratuits · SSL · DNS · Docker · Nginx · SSH · Mermaid · et plus