Module 2 â Les 10 commandes essentielles pour le support
Durée: 2h00 | Prérequis: Module 1 complété
Objectif
à la fin de ce module, vous maßtriserez les 10 commandes PowerShell AD qui couvrent la grande majorité des tickets de niveau 1 et 2.
Trois types de commandes
Pour chaque problĂšme, on enchaĂźne :
- Diagnostic â qu'est-ce qui ne va pas ?
- Action sĂ©curisĂ©e â corriger sans casser.
- VĂ©rification â confirmer que c'est rĂ©parĂ©.
Cette structure se retrouve dans chacun des 10 cas qui suivent.
1. "L'utilisateur ne peut pas se connecter"
Le ticket le plus fréquent. à maßtriser parfaitement.
Version recommandée
# Diagnostic complet d'un utilisateur
Get-ADUser -Identity Richard -Properties * | Select-Object `
Name, SamAccountName, Enabled, LockedOut,
PasswordExpired, PasswordNeverExpires,
LastLogonDate, BadPwdCount, AccountExpirationDate
# Résultat type:
Name : Richard
SamAccountName : Richard
Enabled : True
LockedOut : False
PasswordExpired : False
PasswordNeverExpires : True
LastLogonDate : 28/09/2025 14:30:15
BadPwdCount : 0
AccountExpirationDate :
Variante plus lourde
# Toutes les propriĂ©tĂ©s â coĂ»teux sur gros AD, Ă Ă©viter sauf nĂ©cessitĂ©
Get-ADUser -Identity Richard -Properties *
Ă ne pas faire
# Charge TOUS les utilisateurs avec TOUTES les propriĂ©tĂ©s â crash potentiel
Get-ADUser -Filter * -Properties *
Points clés
- Vérifier d'abord
EnabledetLockedOut. - Si
LockedOut = True:Unlock-ADAccount -Identity Richard -WhatIf. - Si
Enabled = False: chercher pourquoi avant de réactiver.
Exercice 2.1
Diagnostiquer pourquoi Valeria ne peut pas se connecter.
Get-ADUser -Identity Valeria -Properties Enabled, LockedOut, PasswordExpired, LastLogonDate
2. Trouver un utilisateur par nom partiel
"Je cherche l'utilisateur qui s'appelle quelque chose comme Valerie ou Valeria."
Version recommandée
# Recherche par prénom approximatif
Get-ADUser -Filter {GivenName -like "Val*"} -SearchBase "OU=EU,DC=maxtec,DC=be" |
Select-Object Name, SamAccountName, Department, Enabled
# Résultat:
Name SamAccountName Department Enabled
---- -------------- ---------- -------
Valentin Valentin Ventes True
Valeria Valeria Ventes True
Variante plus large
# Recherche sur le Name complet â peut ĂȘtre lent
Get-ADUser -Filter {Name -like "*Val*"} -Properties Department
Ă ne pas faire
# RécupÚre tous les utilisateurs en mémoire avant de filtrer
Get-ADUser -Filter * | Where-Object { $_.Name -match ".*Val.*" }
Points clés
- Utilisez
-SearchBasepour limiter la portée. - Préférez
GivenNameetSurnameĂName. - Le wildcard
*fonctionne avec-like.
Exercice 2.2
Trouver tous les utilisateurs dont le nom de famille commence par "Ch".
Get-ADUser -Filter {Surname -like "Ch*"} -SearchBase "OU=EU,DC=maxtec,DC=be"
3. Ajouter un utilisateur Ă un groupe
"Le nouvel employé a besoin d'accÚs au systÚme comptabilité."
Version recommandée
# Toujours -WhatIf d'abord
Add-ADGroupMember -Identity "GG-EU-Compta-Users" -Members Charles -WhatIf
# Vérifier les membres actuels
Get-ADGroupMember -Identity "GG-EU-Compta-Users" | Select-Object Name
# Si OK, exécuter sans -WhatIf
Add-ADGroupMember -Identity "GG-EU-Compta-Users" -Members Charles
Ajout en lot
$utilisateurs = @("Charles", "Cindy", "Charlotte")
$utilisateurs | ForEach-Object {
Add-ADGroupMember -Identity "GG-EU-Compta-Users" -Members $_ -WhatIf
}
Ă ne pas faire
# Sans validation prĂ©alable â peut donner des droits admin par erreur
Add-ADGroupMember -Identity "Admins du domaine" -Members Charles
Points clés
- Vérifier le groupe de destination avant ajout.
-WhatIfobligatoire pour tout changement de droits.- Confirmer aprĂšs ajout avec
Get-ADGroupMember.
Exercice 2.3
Ajouter Rebecca au groupe RH-Admins, avec toutes les vérifications.
# 1. Vérifier le groupe
Get-ADGroup -Identity "GG-EU-RH-Admins"
# 2. Voir les membres actuels
Get-ADGroupMember -Identity "GG-EU-RH-Admins"
# 3. Simuler
Add-ADGroupMember -Identity "GG-EU-RH-Admins" -Members Rebecca -WhatIf
# 4. Si OK, exécuter
Add-ADGroupMember -Identity "GG-EU-RH-Admins" -Members Rebecca
4. Voir les groupes d'un utilisateur
"Quels sont les droits de cet utilisateur ?"
Version recommandée
Get-ADPrincipalGroupMembership -Identity Richard |
Select-Object Name, GroupScope, GroupCategory |
Sort-Object Name
# Résultat:
Name GroupScope GroupCategory
---- ---------- -------------
Domain Users Global Security
GG-EU-RH-Admins Global Security
GG-EU-RH-Users Global Security
Variante via MemberOf
# Affiche les DN complets â moins lisible
Get-ADUser -Identity Richard -Properties MemberOf |
Select-Object -ExpandProperty MemberOf
Ă ne pas faire
# RĂ©cursif sur tous les groupes â trĂšs lent
Get-ADGroup -Filter * | ForEach-Object {
Get-ADGroupMember -Identity $_ -Recursive
}
Points clés
Get-ADPrincipalGroupMembershipest plus lisible queMemberOf.- Trier par nom facilite la lecture.
- Documenter les droits critiques observés.
Exercice 2.4
Comparer les droits entre Ivan et Irene (tous deux IT).
Write-Host "=== GROUPES IVAN ===" -ForegroundColor Cyan
Get-ADPrincipalGroupMembership -Identity Ivan | Select-Object Name | Sort-Object Name
Write-Host "=== GROUPES IRENE ===" -ForegroundColor Yellow
Get-ADPrincipalGroupMembership -Identity Irene | Select-Object Name | Sort-Object Name
5. Désactiver un compte (départ d'un collaborateur)
"Marie quitte la société vendredi, désactiver son compte."
Version recommandée
$utilisateur = "Marie"
$raisonDepart = "Fin de contrat - $(Get-Date -Format 'dd/MM/yyyy')"
# 1. Vérifier l'état actuel
Get-ADUser -Identity $utilisateur | Select-Object Name, Enabled, LastLogonDate
# 2. Simuler
Set-ADUser -Identity $utilisateur -Enabled $false -Description $raisonDepart -WhatIf
# 3. Exécuter
Set-ADUser -Identity $utilisateur -Enabled $false -Description $raisonDepart
# 4. Vérifier
Get-ADUser -Identity $utilisateur | Select-Object Name, Enabled, Description
Variante avec retrait des groupes
# Désactivation + retrait de tous les groupes sauf Domain Users
$groupes = Get-ADPrincipalGroupMembership -Identity $utilisateur |
Where-Object { $_.Name -ne "Domain Users" }
$groupes | ForEach-Object {
Remove-ADGroupMember -Identity $_.Name -Members $utilisateur -WhatIf
}
Ă ne pas faire
# Suppression directe â perte de donnĂ©es, problĂšmes d'audit
Remove-ADUser -Identity Marie -Confirm:$false
Points clés
- Désactiver n'est pas supprimer. Désactivez d'abord.
- Documenter la raison dans
Description. - Attendre 90 jours avant suppression définitive.
6. Réinitialiser un mot de passe
"L'utilisateur a oublié son mot de passe."
Version recommandée
# Mot de passe temporaire généré aléatoirement
$motDePasseTemp = "TempPass$(Get-Random -Minimum 1000 -Maximum 9999)!"
# 1. Vérifier l'utilisateur
Get-ADUser -Identity Charles | Select-Object Name, Enabled
# 2. Reset + obligation de changer au prochain logon
Set-ADAccountPassword -Identity Charles -Reset -NewPassword (ConvertTo-SecureString $motDePasseTemp -AsPlainText -Force)
Set-ADUser -Identity Charles -ChangePasswordAtLogon $true
# 3. Communiquer par canal sĂ©curisĂ© (tĂ©lĂ©phone, en personne â pas email/chat)
Write-Host "Mot de passe temporaire généré pour Charles" -ForegroundColor Green
Variante interactive
# Demander le mot de passe à l'admin (entrée masquée)
$nouveauMDP = Read-Host "Nouveau mot de passe" -AsSecureString
Set-ADAccountPassword -Identity Charles -Reset -NewPassword $nouveauMDP
Ă ne pas faire
# Mot de passe en clair dans le script â visible dans l'historique
Set-ADAccountPassword -Identity Charles -NewPassword "Password123"
Points clés
- Toujours forcer le changement au prochain logon.
- Jamais de mot de passe en clair dans un script.
- Transmettre par canal sécurisé.
7. Trouver les comptes verrouillés
"Plusieurs utilisateurs disent qu'ils ne peuvent pas se connecter."
Version recommandée
# Liste des comptes verrouillés sous OU=EU
Get-ADUser -Filter {LockedOut -eq $true} -SearchBase "OU=EU,DC=maxtec,DC=be" -Properties LockedOut, LastBadPasswordAttempt, BadPwdCount |
Select-Object Name, SamAccountName, LastBadPasswordAttempt, BadPwdCount |
Format-Table -AutoSize
# Déverrouiller en simulation d'abord
Get-ADUser -Filter {LockedOut -eq $true} -SearchBase "OU=EU,DC=maxtec,DC=be" |
Unlock-ADAccount -WhatIf
Variante avec Search-ADAccount
Search-ADAccount -LockedOut -SearchBase "OU=EU,DC=maxtec,DC=be" |
Get-ADUser -Properties LastBadPasswordAttempt, BadPwdCount, LastLogonDate
Ă ne pas faire
# DĂ©verrouillage en masse sans diagnostic â masque les tentatives d'intrusion
Get-ADUser -Filter {LockedOut -eq $true} | Unlock-ADAccount
Points clés
- Vérifier la cause avant de déverrouiller.
- Chercher des patterns (mĂȘme heure, mĂȘme IP source).
- Alerter la sécurité si beaucoup de comptes affectés.
8. Créer un nouvel utilisateur (onboarding)
"Nouveau collaborateur lundi, préparer son compte."
Version recommandée
$prenom = "Marie"
$nom = "Dubois"
$department = "Ventes"
$motDePasseTemp = "Welcome$(Get-Random -Minimum 100 -Maximum 999)!"
$samAccountName = "$prenom.$nom".ToLower()
$userPrincipalName = "$samAccountName@maxtec.be"
$displayName = "$prenom $nom"
$ouPath = "OU=Users,OU=$department,OU=EU,DC=maxtec,DC=be"
# Vérifier que l'OU existe
try {
Get-ADOrganizationalUnit -Identity $ouPath -ErrorAction Stop
Write-Host "OU trouvée: $ouPath" -ForegroundColor Green
} catch {
Write-Error "OU non trouvée: $ouPath"
break
}
# CrĂ©ation â simuler d'abord
$parametres = @{
Name = $displayName
SamAccountName = $samAccountName
UserPrincipalName = $userPrincipalName
GivenName = $prenom
Surname = $nom
DisplayName = $displayName
Department = $department
Path = $ouPath
AccountPassword = (ConvertTo-SecureString $motDePasseTemp -AsPlainText -Force)
ChangePasswordAtLogon = $true
Enabled = $true
}
New-ADUser @parametres -WhatIf
Exercice 2.8
Créer l'utilisateur Sophie Martin pour le département IT en adaptant le script ci-dessus.
9. Vérifier l'état du domaine et de la réplication
"Les changements ne se propagent pas entre serveurs."
Version recommandée
# Ătat du domaine
Get-ADDomain | Select-Object DNSRoot, DomainMode, PDCEmulator
# ContrĂŽleurs de domaine
Get-ADDomainController -Filter * | Select-Object Name, IPv4Address, OperatingSystem
# Test rapide via création d'objet (simulation)
New-ADOrganizationalUnit -Name "Test-Replication" -Path "DC=maxtec,DC=be" -WhatIf
Points clés
- Tester avant de blùmer la réplication.
- Vérifier que les services AD tournent sur le DC.
- Laisser 15 minutes avant de conclure Ă un problĂšme.
10. Audit des droits administrateurs
"Qui a les droits admin dans notre domaine ?"
Version recommandée
$groupesPrivileges = @(
"Admins du domaine",
"Enterprise Admins",
"Schema Admins",
"Account Operators",
"Server Operators"
)
foreach ($groupe in $groupesPrivileges) {
try {
Write-Host "=== $groupe ===" -ForegroundColor Cyan
Get-ADGroupMember -Identity $groupe -ErrorAction Stop |
Select-Object Name, SamAccountName, ObjectClass |
Format-Table -AutoSize
} catch {
Write-Host "Groupe $groupe non trouvé ou inaccessible" -ForegroundColor Yellow
}
}
RĂ©capitulatif â les 10 commandes
- Diagnostic utilisateur :
Get-ADUser -Identity X -Properties * - Recherche partielle :
Get-ADUser -Filter {Name -like "*X*"} - Ajouter au groupe :
Add-ADGroupMember -Identity Y -Members X -WhatIf - Voir les groupes :
Get-ADPrincipalGroupMembership -Identity X - Désactiver un compte :
Set-ADUser -Identity X -Enabled $false -WhatIf - Reset password :
Set-ADAccountPassword -Identity X -Reset - Comptes verrouillés :
Get-ADUser -Filter {LockedOut -eq $true} - Créer un utilisateur :
New-ADUser @parametres -WhatIf - Vérifier le domaine :
Get-ADDomain - Audit admins :
Get-ADGroupMember -Identity "Admins du domaine"
Pour chaque commande, gardez en tĂȘte la sĂ©quence : diagnostic â action â vĂ©rification.
Quiz â rĂ©flexes de support (10 min)
Lundi 8h, cinq tickets urgents :
- Charles ne peut plus se connecter depuis vendredi.
- Nouvelle stagiaire Sophie doit accéder aux dossiers Ventes.
- Liste des utilisateurs qui n'ont jamais changé leur mot de passe.
- Marie part aujourd'hui, désactiver son compte.
- Vérifier qui a les droits Domain Admin.
Ăcrivez la commande PowerShell correspondante (une ligne par ticket).
Réponses :
# 1
Get-ADUser -Identity Charles -Properties Enabled, LockedOut, LastLogonDate
# 2
Add-ADGroupMember -Identity "GG-EU-Ventes-Users" -Members Sophie -WhatIf
# 3
Get-ADUser -Filter * -Properties PasswordLastSet | Where-Object { $_.PasswordLastSet -eq $null }
# 4
Set-ADUser -Identity Marie -Enabled $false -WhatIf
# 5
Get-ADGroupMember -Identity "Admins du domaine"
Suite : Module 3 â Utiliser une IA comme copilote (prompts efficaces et validation critique).