KYOSH1RO

◀ Cheatsheets / WINDOWS & POWERSHELL

Active Directory en PowerShell

Administrer Active Directory avec PowerShell : utilisateurs, ordinateurs, groupes, OU, recherches LDAP, comptes verrouillés, exports, contrôleurs de domaine et diagnostic.

Filtrer
Le module PowerShell ActiveDirectory permet d'interroger et d'administrer AD DS avec des objets structurés. Les commandes de lecture sont idéales pour les audits ; les commandes de modification doivent être testées avec -WhatIf lorsqu'il est disponible.

Installer et charger le module

5 cmds
Get-WindowsCapability -Online | Where-Object Name -like 'Rsat.ActiveDirectory*'Vérifier RSAT
Add-WindowsCapability -Online -Name Rsat.ActiveDirectory.DS-LDS.Tools~~~~0.0.1.0Installer les outils AD
Import-Module ActiveDirectoryCharger le module
Get-Command -Module ActiveDirectoryLister les commandes disponibles
Get-Help Get-ADUser -ExamplesVoir les exemples intégrés
● Utiliser un compte disposant uniquement des délégations nécessaires
● Cibler explicitement une OU ou un contrôleur pour les opérations sensibles
● Tester les filtres avec une commande de lecture avant toute modification
● Exporter la liste des objets concernés avant une opération en masse

Informations sur le domaine et la forêt

5 cmds
Get-ADDomainDomaine courant
Get-ADForestForêt courante
Get-ADDomainController -Filter *Contrôleurs de domaine
Get-ADTrust -Filter *Relations d'approbation
Get-ADRootDSEContextes d'annuaire disponibles

Rechercher un utilisateur

4 cmds
Get-ADUser -Identity jdupontRechercher par sAMAccountName
Get-ADUser -Identity jdupont -Properties mail,Department,Title,Manager,LastLogonDatePropriétés supplémentaires
Get-ADUser -Filter 'Name -like "Jean*"' | Select-Object Name,SamAccountName,EnabledRecherche par nom
Get-ADUser -Filter 'Enabled -eq $true' -SearchBase 'OU=Utilisateurs,DC=exemple,DC=lan'Utilisateurs actifs d'une OU
Les cmdlets AD ne chargent qu'un ensemble de propriétés par défaut. Ajouter -Properties uniquement pour les attributs nécessaires afin de limiter le trafic et le temps de réponse.

Filtres PowerShell et LDAP

4 cmds
Get-ADUser -Filter 'Department -eq "IT"' -Properties Department
Get-ADUser -Filter 'mail -like "*@exemple.fr"' -Properties mail
Get-ADUser -LDAPFilter '(&(objectCategory=person)(objectClass=user)(department=IT))' -Properties Department
Get-ADComputer -LDAPFilter '(name=*LAPTOP*)' -SearchBase 'OU=Postes,DC=exemple,DC=lan'
● Filter utilise le langage d'expression du module ActiveDirectory
● LDAPFilter accepte une requête LDAP existante
● SearchBase limite la recherche à un DN précis
● SearchScope peut être Base, OneLevel ou Subtree

Comptes verrouillés, désactivés ou expirés

8 cmds
Search-ADAccount -LockedOut -UsersOnlyComptes verrouillés
Search-ADAccount -AccountDisabled -UsersOnlyComptes désactivés
Search-ADAccount -AccountExpired -UsersOnlyComptes expirés
Search-ADAccount -PasswordExpired -UsersOnlyMots de passe expirés
Search-ADAccount -AccountInactive -UsersOnly -TimeSpan 90.00:00:00Inactifs depuis 90 jours
Déverrouiller un compte
Unlock-ADAccount -Identity jdupont -WhatIfSimuler
Unlock-ADAccount -Identity jdupontDéverrouiller
Get-ADUser jdupont -Properties LockedOut,BadLogonCount,LastBadPasswordAttemptVérifier

Activer, désactiver et modifier un utilisateur

8 cmds
Disable-ADAccount -Identity jdupont -WhatIfSimuler la désactivation
Disable-ADAccount -Identity jdupontDésactiver le compte
Enable-ADAccount -Identity jdupontRéactiver le compte
Set-ADUser -Identity jdupont -Department 'Infrastructure' -Title 'Administrateur système' -WhatIfSimuler
Set-ADUser -Identity jdupont -Department 'Infrastructure' -Title 'Administrateur système'Appliquer
Réinitialiser un mot de passe
$NouveauMotDePasse = Read-Host 'Nouveau mot de passe' -AsSecureString
Set-ADAccountPassword -Identity jdupont -Reset -NewPassword $NouveauMotDePasse
Set-ADUser -Identity jdupont -ChangePasswordAtLogon $true
Ne jamais écrire un mot de passe en clair dans un script, un historique PowerShell ou un fichier CSV. Utiliser une saisie sécurisée ou un coffre de secrets.

Créer un utilisateur

3 cmds
$MotDePasse = Read-Host 'Mot de passe initial' -AsSecureString
New-ADUser -Name 'Jean Dupont' -GivenName 'Jean' -Surname 'Dupont' -SamAccountName 'jdupont' -UserPrincipalName '[email protected]' -Path 'OU=Utilisateurs,DC=exemple,DC=lan' -AccountPassword $MotDePasse -Enabled $true -ChangePasswordAtLogon $true -WhatIf
New-ADUser -Name 'Jean Dupont' -GivenName 'Jean' -Surname 'Dupont' -SamAccountName 'jdupont' -UserPrincipalName '[email protected]' -Path 'OU=Utilisateurs,DC=exemple,DC=lan' -AccountPassword $MotDePasse -Enabled $true -ChangePasswordAtLogon $true

Groupes et appartenances

8 cmds
Get-ADGroup -Filter 'Name -like "IT-*"'Rechercher des groupes
Get-ADGroupMember -Identity 'IT-Admins'Membres directs
Get-ADGroupMember -Identity 'IT-Admins' -RecursiveMembres imbriqués
Get-ADPrincipalGroupMembership -Identity jdupont | Select-Object Name,GroupScopeGroupes d'un utilisateur
Add-ADGroupMember -Identity 'IT-Admins' -Members jdupont -WhatIfSimuler l'ajout
Add-ADGroupMember -Identity 'IT-Admins' -Members jdupontAjouter
Remove-ADGroupMember -Identity 'IT-Admins' -Members jdupont -WhatIfSimuler le retrait
Remove-ADGroupMember -Identity 'IT-Admins' -Members jdupontRetirer avec confirmation

Ordinateurs du domaine

5 cmds
Get-ADComputer -Identity PC-001 -Properties OperatingSystem,OperatingSystemVersion,LastLogonDate
Get-ADComputer -Filter 'OperatingSystem -like "*Server*"' -Properties OperatingSystem,IPv4AddressServeurs
Get-ADComputer -Filter 'Name -like "LAPTOP-*"' -SearchBase 'OU=Postes,DC=exemple,DC=lan'Portables d'une OU
$DateLimite = (Get-Date).AddDays(-90)
Get-ADComputer -Filter 'LastLogonDate -lt $DateLimite' -Properties LastLogonDate | Select-Object Name,LastLogonDateOrdinateurs anciens
LastLogonDate repose sur un attribut répliqué et convient à un inventaire approximatif, pas à une preuve à la minute près du dernier logon.

Unités d'organisation et déplacements

4 cmds
Get-ADOrganizationalUnit -Filter * | Select-Object Name,DistinguishedName
Get-ADOrganizationalUnit -LDAPFilter '(name=*Serveurs*)'
Move-ADObject -Identity 'CN=PC-001,OU=Postes,DC=exemple,DC=lan' -TargetPath 'OU=Quarantaine,DC=exemple,DC=lan' -WhatIf
Move-ADObject -Identity 'CN=PC-001,OU=Postes,DC=exemple,DC=lan' -TargetPath 'OU=Quarantaine,DC=exemple,DC=lan'

Recherches utiles

4 cmds
Utilisateurs sans adresse mail
Get-ADUser -Filter 'Enabled -eq $true -and mail -notlike "*"' -Properties mail | Select-Object Name,SamAccountName
Mots de passe n'expirant jamais
Get-ADUser -Filter 'PasswordNeverExpires -eq $true' -Properties PasswordNeverExpires | Select-Object Name,SamAccountName
Comptes créés récemment
$Depuis = (Get-Date).AddDays(-30)
Get-ADUser -Filter 'Created -ge $Depuis' -Properties Created | Sort-Object Created -Descending

Exporter un inventaire

3 cmds
Get-ADUser -Filter * -Properties mail,Department,Enabled,LastLogonDate | Select-Object Name,SamAccountName,mail,Department,Enabled,LastLogonDate | Export-Csv .\utilisateurs-ad.csv -NoTypeInformation -Encoding UTF8
Get-ADComputer -Filter * -Properties OperatingSystem,LastLogonDate | Select-Object Name,OperatingSystem,LastLogonDate | Export-Csv .\ordinateurs-ad.csv -NoTypeInformation -Encoding UTF8
Get-ADGroupMember -Identity 'IT-Admins' -Recursive | Select-Object Name,SamAccountName,ObjectClass | Export-Csv .\membres-it-admins.csv -NoTypeInformation -Encoding UTF8

Cibler un contrôleur ou utiliser d'autres identifiants

5 cmds
Get-ADUser -Identity jdupont -Server dc01.exemple.lan
$Credential = Get-Credential
Get-ADUser -Identity jdupont -Server dc01.exemple.lan -Credential $Credential
Get-ADUser -Identity 'CN=Jean Dupont,OU=Utilisateurs,DC=exemple,DC=lan'
Get-ADUser -Identity 'S-1-5-21-000000000-000000000-000000000-1105'

Diagnostic AD

5 cmds
Test-ComputerSecureChannel -VerboseCanal sécurisé du poste
nltest /dsgetdc:exemple.lanDécouverte d'un contrôleur
repadmin /replsummaryRésumé de réplication
Get-ADReplicationFailure -Target * -Scope ForestÉchecs de réplication
Get-ADReplicationPartnerMetadata -Target * -Scope DomainPartenaires de réplication

Opérations en masse — méthode sûre

3 cmds
$Utilisateurs = Import-Csv .\utilisateurs-a-modifier.csv
$Utilisateurs | ForEach-Object { Set-ADUser -Identity $_.SamAccountName -Department $_.Department -WhatIf }
$Utilisateurs | Export-Csv .\operation-prevue.csv -NoTypeInformation -Encoding UTF8
● Valider le CSV et les encodages
● Stocker les objets ciblés dans une variable
● Compter et exporter les cibles
● Exécuter une première passe avec WhatIf
● Traiter un petit échantillon
● Journaliser les succès et les erreurs

Bonnes pratiques

● Déléguer les droits au niveau des OU plutôt que d'utiliser Domain Admin
● Cibler les recherches avec SearchBase
● Utiliser WhatIf avant les commandes de modification
● Éviter Properties * sur de grandes recherches
● Ne jamais stocker de mots de passe en clair
● Exporter l'état avant une modification en masse
● Vérifier la réplication avant de conclure qu'un changement est absent

Aucune commande ne correspond à ce filtre.