Mode opératoire — Les comptes Active Directory
Document autonome. Partie théorique, puis mise en œuvre en ligne de commande sur une installation Server Core, où aucune console graphique n’est disponible.
Dernière mise à jour : 03/10/2026 État au 12/11/2026 : 6 utilisateurs, groupes
GG-Direction,GG-Administratif,GG-Technique,DL-Partage-Technique-Modifier(aucun partage de fichiers créé) ; OUComptes de serviceetPostes-testajoutées le 11/11 ; GPO et LAPS : voir MO-20.
Sommaire
| § | Contenu |
|---|---|
| 1 | Pourquoi tout se fait en ligne de commande — et pourquoi c’est mieux |
| 2 | Conteneur ou unité d’organisation : la distinction qui conditionne tout |
| 3 | Concevoir l’arborescence avant de créer quoi que ce soit |
| 4 | Créer les unités d’organisation |
| 5 | Anatomie d’un compte — les attributs qui comptent vraiment |
| 6 | Créer un utilisateur |
| 7 | Créer en lot à partir d’un fichier |
| 8 | Les groupes et leurs portées — la règle AGDLP |
| 9 | Déplacer, désactiver, supprimer — le cycle de vie d’un compte |
| 10 | Rediriger les emplacements par défaut |
| 11 | Vérifier et auditer |
| 12 | L’administration au quotidien — un compte à la fois, modifier, la console |
| 13 | Pièges et checklists |
1 · Pourquoi la ligne de commande
Sur une installation Server Core, la console Utilisateurs et ordinateurs Active Directory n’existe pas. Il reste trois voies :
| Voie | Remarque |
|---|---|
| PowerShell en local | Le module ActiveDirectory, installé avec les outils d’administration du rôle |
| PowerShell à distance | Depuis un autre poste, avec les outils d’administration distante |
| Console graphique déportée | Installée sur une machine avec interface, pilotant le contrôleur à distance |
L’absence d’interface graphique n’est pas une contrainte, c’est une discipline. Une création de compte faite en PowerShell est reproductible : la commande peut être relue, corrigée, versionnée, rejouée à l’identique sur un autre domaine. Les mêmes clics dans une console ne laissent aucune trace exploitable.
C’est aussi ce qui rend la création en lot possible. Trente comptes à la souris, c’est une heure et deux fautes de frappe ; trente comptes depuis un fichier, c’est une commande.
Vérifier que le module répond :
Get-ADDomain | Format-List DNSRoot, DistinguishedName
Note le
DistinguishedName— par exempleDC=sio,DC=internal. Il sert de racine à tous les chemins que tu écriras ensuite.
2 · Conteneur ou unité d’organisation
C’est la notion la plus importante du document, et celle qui coûte le plus cher quand on l’ignore.
Un annuaire fraîchement créé contient déjà des emplacements : CN=Users, CN=Computers,
CN=Builtin. Ils ressemblent à des dossiers, ils n’en sont pas.
CN=Users et CN=Computers | Une unité d’organisation | |
|---|---|---|
| Nature de l’objet | Conteneur (container) | Unité d’organisation (organizationalUnit) |
| Créé par | Windows, à la création du domaine | Toi |
| Peut-on y lier une stratégie de groupe ? | Non | Oui |
| Peut-on y déléguer des droits d’administration ? | Très limité | Oui, finement |
| Peut-on le supprimer ou le renommer ? | Non | Oui |
sio.internal
├── CN=Users <- conteneur : AUCUNE GPO ne peut s'y lier
├── CN=Computers <- conteneur : idem
├── CN=Builtin <- conteneur : les groupes integres
└── OU=SIO <- unite d'organisation : tout devient possible
New-ADUserdépose par défaut dansCN=Users. Si tu ne précises pas-Path, ton compte atterrit dans un conteneur sur lequel aucune stratégie ne pourra jamais s’appliquer — en dehors de celle du domaine entier.C’est l’erreur classique : créer les comptes, écrire la stratégie, la lier, et constater qu’elle ne produit aucun effet. On cherche alors du côté de la stratégie, qui est pourtant parfaite. Le problème est l’emplacement des comptes.
Le §10 montre comment changer cet emplacement par défaut, pour que l’erreur devienne impossible.
3 · Concevoir l’arborescence avant de créer
3.1 Les trois critères
Une arborescence d’annuaire ne reflète pas l’organigramme pour faire joli. Elle répond à trois questions opérationnelles :
| Question | Ce qu’elle détermine |
|---|---|
| À qui appliquer quelle stratégie ? | Le découpage en unités d’organisation |
| Qui a le droit d’administrer quoi ? | Les délégations, qui se posent par unité d’organisation |
| Que faire quand quelqu’un change de service ? | Un déplacement d’objet, et les stratégies suivent |
Le découpage se fait selon ce qui diffère, pas selon ce qui existe. Si tous les services reçoivent exactement les mêmes stratégies et sont administrés par les mêmes personnes, les séparer n’apporte rien — c’est de la complexité gratuite. On crée une unité d’organisation quand on a une raison de la traiter différemment.
3.2 Le modèle retenu
DC=sio,DC=internal
└── OU=SIO racine de l'organisation
├── OU=Utilisateurs
│ ├── OU=Direction
│ ├── OU=Administratif
│ └── OU=Technique
├── OU=Ordinateurs les postes de travail (sous-OU Postes-test depuis le 11/11)
├── OU=Groupes les groupes de sécurité
└── OU=Comptes de service CS_glpi_ldap (lecture de l'annuaire par GLPI, 11/11)
| Décision | Justification |
|---|---|
Une racine OU=SIO | Permet de poser une stratégie sur toute l’organisation sans toucher au domaine lui-même, où vivent les contrôleurs. On ne mélange jamais les contrôleurs de domaine avec le reste. |
| Utilisateurs et Ordinateurs séparés | Une stratégie a deux moitiés — une pour les utilisateurs, une pour les machines. Les séparer permet de lier la bonne moitié au bon endroit |
| Des sous-unités par service | C’est là que les stratégies deviennent utiles : un réglage pour la Direction, un autre pour l’Administratif |
| Les groupes à part | Ils ne reçoivent pas de stratégie : les isoler évite de les confondre avec des utilisateurs dans les listes |
Ne jamais déplacer les contrôleurs de domaine hors de leur unité
OU=Domain Controllers. Une stratégie par défaut y est liée — Default Domain Controllers Policy — et elle porte des réglages de sécurité essentiels. Déplacer un contrôleur, c’est le priver de ces réglages sans aucun avertissement.
4 · Créer les unités d’organisation
$racine = "DC=sio,DC=internal"
New-ADOrganizationalUnit -Name "SIO" -Path $racine
New-ADOrganizationalUnit -Name "Utilisateurs" -Path "OU=SIO,$racine"
New-ADOrganizationalUnit -Name "Ordinateurs" -Path "OU=SIO,$racine"
New-ADOrganizationalUnit -Name "Groupes" -Path "OU=SIO,$racine"
foreach ($s in "Direction","Administratif","Technique") {
New-ADOrganizationalUnit -Name $s -Path "OU=Utilisateurs,OU=SIO,$racine"
}
Lire un chemin d’annuaire
Un DistinguishedName se lit de droite à gauche — du plus général au plus précis :
OU=Direction , OU=Utilisateurs , OU=SIO , DC=sio , DC=internal
│ │ │ └───────┬──────┘
│ │ │ │
la plus au-dessus au-dessus le domaine
precise
C’est l’inverse d’un chemin de fichiers, où la racine est à gauche. C’est la source d’erreur numéro un quand on débute : un chemin écrit à l’envers produit un message qui ne dit pas que l’ordre est faux, seulement que l’objet est introuvable.
La protection contre la suppression accidentelle
New-ADOrganizationalUnit active par défaut l’option protégé contre la suppression
accidentelle. C’est une bonne chose — et une source de blocage incompréhensible :
Remove-ADOrganizationalUnit -Identity "OU=Technique,OU=Utilisateurs,OU=SIO,$racine"
# Accès refusé <- alors qu'on est administrateur du domaine
Il faut d’abord lever la protection :
Set-ADOrganizationalUnit -Identity "OU=Technique,OU=Utilisateurs,OU=SIO,$racine" `
-ProtectedFromAccidentalDeletion $false
« Accès refusé » alors qu’on est administrateur du domaine est presque toujours cette protection. Elle ne pose pas une question de droits mais une interdiction explicite, posée sur l’objet. Le message, lui, ne le dit pas.
5 · Anatomie d’un compte
Un compte utilisateur porte plusieurs noms, et ils ne servent pas à la même chose. C’est une source de confusion durable tant qu’on ne les a pas distingués.
| Attribut | Exemple | Rôle |
|---|---|---|
Name (le CN) | Axel Gouirand | Le nom affiché dans l’annuaire. Doit être unique dans son unité d’organisation |
SamAccountName | a.gouirand | L’identifiant de connexion historique : SIO\a.gouirand. 20 caractères maximum |
UserPrincipalName | [email protected] | L’identifiant moderne, en forme d’adresse. C’est celui que Windows propose aujourd’hui |
GivenName · Surname | Axel · Gouirand | Prénom et nom, pour les annuaires et la recherche |
DisplayName | Axel Gouirand | Ce qu’affichent les applications |
Enabled | $true | Un compte créé sans mot de passe est forcément désactivé |
Les deux identifiants de connexion coexistent, et les deux fonctionnent.
SIO\a.gouirandet[email protected]ouvrent la même session. Le premier est hérité des protocoles anciens, le second est aligné sur les usages actuels. Choisis-en un comme convention et tiens-t’y : c’est celui que tu écriras dans les procédures et que les utilisateurs apprendront.
La limite de 20 caractères du
SamAccountNameest stricte et silencieuse. Un nom composé long est tronqué ou refusé. Une convention courte — initiale du prénom, point, nom — évite le problème dès le départ.
6 · Créer un utilisateur
6.1 La commande
On range les paramètres dans une table de hachage, puis on la passe avec @p (l’arobase,
pas le dollar) :
$racine = "DC=sio,DC=internal"
$mdp = Read-Host "Mot de passe initial" -AsSecureString
$p = @{
Name = "Axel Gouirand"
GivenName = "Axel"
Surname = "Gouirand"
DisplayName = "Axel Gouirand"
SamAccountName = "a.gouirand"
UserPrincipalName = "[email protected]"
Path = "OU=Technique,OU=Utilisateurs,OU=SIO,$racine"
AccountPassword = $mdp
Enabled = $true
ChangePasswordAtLogon = $true
}
New-ADUser @p
Le splatting est la forme recommandée dès qu’une commande dépasse quatre ou cinq paramètres. Une ligne par paramètre, alignés, lisibles ; on ajoute ou retire une ligne sans casser le reste ; et on peut compléter la table conditionnellement avant l’appel.
Les accents graves de continuation sont fragiles : un espace après l’accent grave et tout casse sans message clair. Et une ligne unique de 250 caractères est tronquée par certains terminaux au collage : les derniers paramètres disparaissent, et le message d’erreur parle d’un « paramètre positionnel » sans rapport avec la cause.
| Paramètre | Pourquoi il compte |
|---|---|
-Path | Sans lui, le compte va dans CN=Users et aucune stratégie ne l’atteindra |
-AccountPassword | Attend un SecureString. Jamais une chaîne en clair |
-Enabled $true | Sans mot de passe valide, la création échoue ou le compte reste désactivé |
-ChangePasswordAtLogon $true | L’utilisateur choisit son mot de passe à la première ouverture : tu ne le connais pas |
-ChangePasswordAtLogonn’est pas un confort, c’est une règle d’hygiène. Tant que l’administrateur connaît le mot de passe d’un utilisateur, aucune action de cet utilisateur ne lui est imputable — il pourrait toujours dire que c’est l’administrateur qui a agi. Le changement au premier accès rétablit cette imputabilité.
Ne jamais écrire le mot de passe dans la commande, même temporairement. Il partirait dans l’historique PowerShell (
ConsoleHost_history.txt), lisible en clair, conservé entre les sessions.
6.2 Le mot de passe sera refusé si…
La stratégie de mot de passe du domaine s’applique dès la création. Par défaut :
| Règle | Valeur par défaut |
|---|---|
| Longueur minimale | 7 caractères |
| Complexité | Activée — 3 catégories parmi majuscules, minuscules, chiffres, caractères spéciaux |
| Le mot de passe ne doit pas contenir le nom du compte | Oui |
Le message d’erreur en cas de refus est trompeur : « Le mot de passe ne répond pas aux exigences » arrive parfois sous une forme générique du type « Impossible de définir le mot de passe ». Avant de chercher ailleurs, vérifier que le mot de passe respecte bien la stratégie.
7 · Créer en lot
C’est là que la ligne de commande prend tout son sens.
7.1 Le fichier
utilisateurs.csv, encodé en UTF-8, séparateur point-virgule :
Prenom;Nom;Identifiant;Service
Axel;Gouirand;a.gouirand;Technique
Marie;Durand;m.durand;Direction
Paul;Martin;p.martin;Administratif
7.2 La commande
$racine = "DC=sio,DC=internal"
$mdp = Read-Host "Mot de passe initial commun" -AsSecureString
Import-Csv .\utilisateurs.csv -Delimiter ";" -Encoding UTF8 | ForEach-Object {
$p = @{
Name = "$($_.Prenom) $($_.Nom)"
GivenName = $_.Prenom
Surname = $_.Nom
DisplayName = "$($_.Prenom) $($_.Nom)"
SamAccountName = $_.Identifiant
UserPrincipalName = "$($_.Identifiant)@sio.internal"
Path = "OU=$($_.Service),OU=Utilisateurs,OU=SIO,$racine"
AccountPassword = $mdp
Enabled = $true
ChangePasswordAtLogon = $true
}
New-ADUser @p
Write-Host "cree : $($_.Identifiant) dans $($_.Service)"
}
Le
Read-Hostdu mot de passe se colle seul, jamais avec le reste. Il lit la ligne suivante : collé d’un bloc avec la boucle, il avalerait la première ligne comme mot de passe.
La colonne
Servicefait le travail : elle construit le chemin de l’unité d’organisation. Ajouter un service revient à créer l’unité correspondante et à écrire son nom dans le fichier — aucune modification du script.
Toujours essayer sur deux lignes avant de lancer les trente. Une erreur de chemin ou de convention se répare à la main sur deux comptes ; sur trente, il faut tout supprimer et recommencer.
8 · Les groupes et leurs portées
8.1 Deux classifications à ne pas confondre
| Classification | Valeurs | Ce qu’elle décide |
|---|---|---|
| Catégorie | Security · Distribution | Un groupe de sécurité peut recevoir des droits. Un groupe de distribution ne sert qu’aux listes de diffusion |
| Portée | DomainLocal · Global · Universal | Qui peut y entrer, et où il peut servir |
Un groupe de distribution ne donne aucun droit. C’est une erreur fréquente : on crée un groupe, on lui attribue des permissions, et rien ne s’applique. Pour donner des droits, il faut
-GroupCategory Security.
8.2 Les trois portées
| Portée | Peut contenir | Peut recevoir des droits |
|---|---|---|
| Global | Des comptes de son domaine | Dans tout le domaine, et au-delà |
| DomainLocal | Des comptes et groupes de n’importe quel domaine | Uniquement dans son domaine |
| Universal | Des comptes de toute la forêt | Partout dans la forêt |
8.3 La règle AGDLP
C’est la méthode canonique d’attribution des droits, et elle tombe régulièrement à l’oral.
A G DL P
Comptes ──► groupe Global ──► groupe DomainLocal ──► Permissions
(QUI ?) (SUR QUOI ?) (la ressource)
| Étape | Exemple |
|---|---|
| A — les comptes | a.gouirand, m.durand |
| G — un groupe Global par rôle | GG-Technique — « les gens de la technique » |
| DL — un groupe DomainLocal par ressource et niveau d’accès | DL-Partage-Technique-Modifier |
| P — la permission posée sur la ressource | Le dossier partagé autorise DL-Partage-Technique-Modifier |
Pourquoi passer par deux groupes au lieu d’un seul. Les deux moitiés changent pour des raisons différentes : qui fait partie d’une équipe change souvent ; quelles ressources cette équipe doit atteindre change rarement. En les séparant, une arrivée dans l’équipe se règle en un ajout dans
GG-Technique, sans jamais retoucher aux permissions des dossiers.Avec un seul groupe, chaque nouvelle ressource impose de revoir tous les groupes, et chaque nouvelle personne de vérifier toutes les permissions. C’est ingérable au-delà de quelques dizaines d’utilisateurs — et c’est exactement ce qu’on trouve dans les infrastructures qui ont grandi sans méthode.
8.4 Les commandes
$grp = "OU=Groupes,OU=SIO,DC=sio,DC=internal"
# G — un groupe par role
New-ADGroup -Name "GG-Technique" -GroupScope Global -GroupCategory Security -Path $grp
# DL — un groupe par ressource et niveau d'acces
New-ADGroup -Name "DL-Partage-Technique-Modifier" -GroupScope DomainLocal -GroupCategory Security -Path $grp
# A dans G
Add-ADGroupMember -Identity "GG-Technique" -Members "a.gouirand"
# G dans DL
Add-ADGroupMember -Identity "DL-Partage-Technique-Modifier" -Members "GG-Technique"
Le préfixe dans le nom (
GG-,DL-) n’est pas obligatoire mais fortement recommandé. La portée d’un groupe n’apparaît pas dans les listes de permissions d’un dossier : sans convention de nommage, impossible de savoir si on regarde un groupe de rôle ou un groupe de ressource.
9 · Le cycle de vie d’un compte
9.1 Déplacer un objet
Un changement de service est un déplacement, pas une recréation :
Move-ADObject -Identity (Get-ADUser a.gouirand).DistinguishedName `
-TargetPath "OU=Direction,OU=Utilisateurs,OU=SIO,DC=sio,DC=internal"
Même chose pour une machine — et c’est à faire pour les postes, qui atterrissent par défaut
dans CN=Computers :
Move-ADObject -Identity (Get-ADComputer poste-win11).DistinguishedName `
-TargetPath "OU=Ordinateurs,OU=SIO,DC=sio,DC=internal"
Le déplacement conserve tout : l’identifiant interne (
SID), les appartenances aux groupes, le mot de passe, l’historique. Seules les stratégies changent, puisqu’elles dépendent de l’emplacement. C’est exactement l’effet recherché lors d’un changement de service.
9.2 Départ d’un collaborateur — désactiver, pas supprimer
Disable-ADAccount -Identity a.gouirand
Set-ADUser -Identity a.gouirand -Description "Desactive le 03/10/2026 - depart"
Move-ADObject -Identity (Get-ADUser a.gouirand).DistinguishedName `
-TargetPath "OU=Desactives,OU=SIO,DC=sio,DC=internal"
Supprimer un compte est irréversible dans ses effets, même si l’objet est récupérable. Le
SIDdisparaît — et c’est lui qui figure dans toutes les permissions de fichiers, pas le nom. Un compte recréé à l’identique porte un nouveauSID: il perd l’accès à tout ce que l’ancien pouvait lire.La procédure canonique est : désactiver, documenter, déplacer, et supprimer plus tard — une fois certain que plus personne n’a besoin de ses fichiers.
9.3 Les gestes courants
Unlock-ADAccount -Identity a.gouirand # compte verrouille
Set-ADAccountPassword -Identity a.gouirand -Reset # reinitialiser
Set-ADUser -Identity a.gouirand -ChangePasswordAtLogon $true # forcer le changement
Enable-ADAccount -Identity a.gouirand # reactiver
Verrouillé n’est pas désactivé. Un compte verrouillé l’a été automatiquement après trop d’échecs d’authentification, et se déverrouille seul après un délai. Un compte désactivé l’a été par un administrateur et le reste. Les deux produisent un refus de connexion, mais ne se traitent pas de la même façon.
10 · Rediriger les emplacements par défaut
Rappel du §2 : sans -Path, un nouvel objet va dans un conteneur où aucune stratégie ne peut
s’appliquer. Et une machine qui rejoint le domaine atterrit toujours dans CN=Computers,
sans qu’on puisse le lui préciser.
Deux outils règlent le problème définitivement :
redirusr "OU=Utilisateurs,OU=SIO,DC=sio,DC=internal"
redircmp "OU=Ordinateurs,OU=SIO,DC=sio,DC=internal"
| Commande | Effet |
|---|---|
redirusr | Les nouveaux utilisateurs créés sans -Path vont dans l’unité désignée |
redircmp | Les machines qui rejoignent le domaine y vont automatiquement |
redircmpest la commande la plus utile des deux, parce que la jonction au domaine ne permet pas de choisir l’emplacement. Sans elle, chaque poste joint doit être déplacé à la main — et celui qu’on oublie ne reçoit aucune stratégie machine, sans que rien ne le signale.À exécuter une fois, juste après avoir créé l’arborescence. Le réglage est permanent.
11 · Vérifier et auditer
11.1 Lister ce qu’on vient de créer
Get-ADOrganizationalUnit -Filter * -SearchBase "OU=SIO,DC=sio,DC=internal" |
Select-Object Name, DistinguishedName
Get-ADUser -Filter * -SearchBase "OU=Utilisateurs,OU=SIO,DC=sio,DC=internal" -Properties Department |
Select-Object Name, SamAccountName, Enabled, DistinguishedName | Format-Table -AutoSize
11.2 Le contrôle qui évite la mauvaise surprise
Get-ADUser -Filter * -SearchBase "CN=Users,DC=sio,DC=internal" |
Select-Object Name, SamAccountName
Tout compte qui apparaît ici ne recevra jamais de stratégie autre que celle du domaine. C’est le contrôle à faire après chaque création en lot, et il prend trois secondes. Les comptes intégrés (
Administrateur,Invité,krbtgt) y figurent normalement — ce sont les autres qu’il faut déplacer.
11.3 Les comptes à surveiller
Search-ADAccount -AccountDisabled | Select-Object Name, DistinguishedName
Search-ADAccount -LockedOut | Select-Object Name, LastLogonDate
Search-ADAccount -AccountInactive -TimeSpan 90.00:00:00 | Select-Object Name, LastLogonDate
Le troisième est celui qu’on ne lance jamais, et qui réserve des surprises. Un compte actif, inutilisé depuis quatre-vingt-dix jours, est au mieux un oubli, au pire une porte ouverte dont plus personne ne surveille l’usage.
12 · L’administration au quotidien
Les sections précédentes décrivent une mise en place : une boucle, six comptes, une fois. Le travail réel d’un administrateur est autre chose : un compte à la fois, et surtout des modifications de comptes existants.
13.1 Créer un seul compte
Le minimum qui fonctionne, sans table de hachage :
New-ADUser -Name "Lucie Blanc" -SamAccountName "l.blanc" -UserPrincipalName "[email protected]" -Path "OU=Direction,OU=Utilisateurs,OU=SIO,DC=sio,DC=internal" -AccountPassword (Read-Host "Mot de passe" -AsSecureString) -Enabled $true -ChangePasswordAtLogon $true
| Paramètre | Obligatoire ? |
|---|---|
-Name | Oui, toujours |
-SamAccountName | Déduit du nom sinon, rarement comme on le voudrait |
-Path | Techniquement non, mais sans lui le compte va dans le conteneur par défaut |
-AccountPassword et -Enabled $true | Sans eux, le compte naît désactivé |
| Prénom, nom, service, téléphone… | Jamais obligatoires : ils se complètent après |
(Read-Host … -AsSecureString)entre parenthèses : la saisie a lieu au moment où PowerShell évalue la parenthèse, donc avant d’exécuter la commande. Pas besoin de variable intermédiaire pour un compte unique.
13.2 Modifier un compte existant
C’est Set-ADUser, et c’est l’essentiel du travail réel.
Set-ADUser l.blanc -Title "Assistante de direction" -Department "Direction" -OfficePhone "0102030405"
| Besoin | Commande |
|---|---|
| Renseigner le service | Set-ADUser l.blanc -Department "Direction" |
| Corriger le nom affiché | Set-ADUser l.blanc -DisplayName "Lucie Blanc" |
| Corriger l’adresse de connexion | Set-ADUser l.blanc -UserPrincipalName "[email protected]" |
| Vider un champ | Set-ADUser l.blanc -Description $null |
| Date d’expiration du compte | Set-ADUser l.blanc -AccountExpirationDate "31/12/2026" |
Set-ADUserne touche que ce que tu nommes. Les autres attributs ne bougent pas : on peut enchaîner les corrections sans craindre d’écraser ce qu’on n’a pas mentionné.
13.3 Trouver le nom d’un attribut
C’est la question qui débloque tout le reste :
Get-ADUser l.blanc -Properties * | Format-List
Tous les attributs du compte apparaissent avec leur nom exact. On repère celui qui
intéresse, on le passe à Set-ADUser.
Par défaut,
Get-ADUserne renvoie qu’une dizaine d’attributs sur la centaine que porte un compte. SiDepartmentouLastLogonDaten’apparaissent pas, ils ne sont pas forcément vides : ils n’ont pas été demandés.Get-ADUser l.blanc -Properties Department, LastLogonDate, MemberOf
13.4 Les gestes courants
| Situation | Commande |
|---|---|
| Mot de passe oublié | Set-ADAccountPassword l.blanc -Reset |
| Forcer le changement ensuite | Set-ADUser l.blanc -ChangePasswordAtLogon $true |
| Compte verrouillé | Unlock-ADAccount l.blanc |
| Départ d’un collaborateur | Disable-ADAccount l.blanc |
| Réactiver | Enable-ADAccount l.blanc |
| Ajouter à un groupe | Add-ADGroupMember GG-Direction -Members l.blanc |
| Retirer d’un groupe | Remove-ADGroupMember GG-Direction -Members l.blanc |
| Voir ses groupes | (Get-ADUser l.blanc -Properties MemberOf).MemberOf |
12.5 Pourquoi -Path dans les exemples
Les deux outils du §10 règlent l’emplacement par défaut, pas l’emplacement voulu. Écrire
-Path reste la façon de dire où ranger le compte. La redirection n’est qu’un filet.
12.6 La console graphique, pour explorer
Un serveur en Core n’a pas de console. Un poste d’administration, lui, peut l’installer :
Add-WindowsCapability -Online -Name "Rsat.ActiveDirectory.DS-LDS.Tools~~~~0.0.1.0"
runas /user:SIO\Administrateur "mmc dsa.msc"
| Console graphique | PowerShell | |
|---|---|---|
| Un compte, une fois | Plus rapide | Correct |
| Parcourir l’arborescence | Plus lisible | Fastidieux |
| Trente comptes | Pénible | Une commande |
| Reproduire ailleurs | Impossible | On rejoue le script |
| Prouver ce qu’on a fait | Rien à montrer | La commande est la preuve |
Les deux coexistent. La console pour le geste ponctuel et l’exploration, PowerShell pour le volume et tout ce qui doit se reproduire ou se documenter.
Être administrateur local ne donne aucun droit dans l’annuaire.
POSTE-WIN11\adminsuffit pour installer les outils, pas pour les utiliser : d’où lerunasavec un compte du domaine. Ce sont deux autorités distinctes que la jonction ne mélange pas.
L’installation passe par Windows Update et peut sembler figée longtemps. Si elle ne progresse plus, tester la résolution de noms par le résolveur du système, pas seulement en interrogeant les serveurs DNS directement : un échec mémorisé dans le cache du poste (
Clear-DnsClientCache) donne exactement ce symptôme.
13 · Pièges et checklists
13.1 Les douze pièges
| # | Piège | Conséquence |
|---|---|---|
| 1 | Créer un compte sans -Path | Il va dans CN=Users : aucune stratégie ne l’atteindra |
| 2 | Croire que CN=Users est une unité d’organisation | On lie une stratégie… qui ne s’applique à personne |
| 3 | Lire un DistinguishedName de gauche à droite | Chemin inversé, objet « introuvable » |
| 4 | SamAccountName de plus de 20 caractères | Refus ou troncature, silencieusement |
| 5 | Mot de passe écrit en clair dans la commande | Il reste dans l’historique PowerShell, lisible |
| 6 | Oublier -ChangePasswordAtLogon | L’administrateur connaît le mot de passe : plus d’imputabilité |
| 7 | Créer un groupe en Distribution | Il ne donnera jamais aucun droit |
| 8 | Attribuer les droits directement aux comptes | Ingérable dès la dizaine d’utilisateurs — voir AGDLP |
| 9 | Supprimer un compte au lieu de le désactiver | Le SID disparaît : les accès aux fichiers sont perdus définitivement |
| 10 | Ne pas poser redircmp | Chaque poste joint reste dans CN=Computers, sans stratégie machine |
| 11 | Une commande sur une seule ligne très longue, collée dans un terminal | Elle est tronquée : les derniers paramètres disparaissent, le message parle d’un « paramètre positionnel ». Parade : le splatting |
| 12 | Relancer une boucle après une nouvelle session | Les variables ont disparu : la boucle s’exécute sur du vide, sans erreur et sans rien créer. Un silence n’est pas un succès |
13.2 Checklist — mise en place de l’annuaire
- Arborescence conçue sur papier avant la première commande
- Racine d’organisation distincte du domaine lui-même
- Utilisateurs, ordinateurs et groupes dans des unités séparées
- Les contrôleurs de domaine laissés dans
OU=Domain Controllers -
redirusretredircmpexécutés - Convention de nommage écrite : identifiants, groupes, unités
13.3 Checklist — création d’un compte
-
-Pathrenseigné, et vérifié -
SamAccountNameconforme à la convention, 20 caractères maximum -
UserPrincipalNamecohérent avec leSamAccountName - Mot de passe saisi masqué, jamais dans la ligne de commande
-
-ChangePasswordAtLogon $true - Appartenances aux groupes posées via le groupe Global de son rôle
-
CN=Userscontrôlé après coup : le compte n’y est pas
13.4 Checklist — hygiène périodique
- Comptes désactivés : encore utiles ou à supprimer ?
- Comptes inactifs depuis plus de 90 jours identifiés
- Aucun compte applicatif sans propriétaire identifié
- Appartenances aux groupes d’administration relues
- Aucun objet égaré dans
CN=UsersouCN=Computers
Le réflexe à garder. Avant chaque création, une seule question : « où est-ce que je le range, et pourquoi là ? » L’emplacement dans l’annuaire n’est pas du classement : c’est lui qui décide des stratégies reçues et des droits d’administration. Un objet bien nommé mais mal rangé est un objet qu’aucune règle n’atteindra.
