Polarys
PowerShell pour l'administration/Gestion des utilisateurs et Active Directory

Gestion des utilisateurs et Active Directory

Export et rapports AD

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-Csv sans -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-ADGroupMember et Disable-ADAccount n'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.

Quiz de validation

Quiz - 2 questions

1. Pourquoi utiliser -Encoding UTF8 avec Export-Csv ?

2. Que fait Get-ADGroupMember -Recursive par rapport à Get-ADGroupMember ?

Suis ta progression

Crée un compte gratuit pour suivre ta progression et accéder à toutes les leçons.