Active Directory PowerShell
Administration Active Directory via PowerShell.

Prรฉrequis
# Importer le module AD
Import-Module ActiveDirectory
# Vรฉrifier la connexion au domaine
Get-ADDomain
# Si RSAT non installรฉ (Windows 10/11)
Add-WindowsCapability -Online -Name Rsat.ActiveDirectory.DS-LDS.Tools~~~~0.0.1.0
Gestion des Utilisateurs (CRUD)
Crรฉer un Utilisateur
# Crรฉation basique
New-ADUser -Name "Jean Dupont" -SamAccountName "jdupont" -Enabled $true
# Crรฉation complรจte et sรฉcurisรฉe
$password = Read-Host -AsSecureString "Enter password"
New-ADUser `
-Name "Jean Dupont" `
-GivenName "Jean" `
-Surname "Dupont" `
-SamAccountName "jdupont" `
-UserPrincipalName "jdupont@corp.local" `
-Path "OU=Users,OU=Paris,DC=corp,DC=local" `
-AccountPassword $password `
-Enabled $true `
-ChangePasswordAtLogon $true `
-Department "IT" `
-Title "SysAdmin"
# Crรฉation en masse depuis CSV
Import-Csv users.csv | ForEach-Object {
New-ADUser `
-Name "$($_.Prenom) $($_.Nom)" `
-SamAccountName $_.Login `
-UserPrincipalName "$($_.Login)@corp.local" `
-Path "OU=Users,DC=corp,DC=local" `
-AccountPassword (ConvertTo-SecureString $_.Password -AsPlainText -Force) `
-Enabled $true
}
Modifier un Utilisateur
# Modifier des attributs
Set-ADUser -Identity jdupont -Department "Security" -Title "Security Engineer"
# Modifier plusieurs attributs
Set-ADUser -Identity jdupont -Replace @{
telephoneNumber = "+33 1 23 45 67 89"
physicalDeliveryOfficeName = "Paris - Floor 3"
}
# Dรฉsactiver un compte
Disable-ADAccount -Identity jdupont
# Activer un compte
Enable-ADAccount -Identity jdupont
# Rรฉinitialiser le mot de passe
Set-ADAccountPassword -Identity jdupont -Reset -NewPassword (Read-Host -AsSecureString "New password")
# Forcer le changement de mot de passe ร la prochaine connexion
Set-ADUser -Identity jdupont -ChangePasswordAtLogon $true
Rechercher des Utilisateurs
# Tous les utilisateurs (ATTENTION : performance !)
Get-ADUser -Filter *
# Filtrer cรดtรฉ serveur (RECOMMANDร)
Get-ADUser -Filter 'Department -eq "IT"'
Get-ADUser -Filter 'Name -like "Jean*"'
Get-ADUser -Filter 'Enabled -eq $false'
# Avec propriรฉtรฉs supplรฉmentaires
Get-ADUser -Identity jdupont -Properties *
Get-ADUser -Filter * -Properties Department, Title, LastLogonDate |
Select-Object Name, Department, Title, LastLogonDate
# Recherche dans une OU spรฉcifique
Get-ADUser -Filter * -SearchBase "OU=Paris,DC=corp,DC=local"
# Utilisateurs crรฉรฉs cette semaine
$date = (Get-Date).AddDays(-7)
Get-ADUser -Filter 'Created -gt $date' -Properties Created |
Select-Object Name, Created
Performance : Filtrer cรดtรฉ serveur
Dรฉbloquer un Compte
# Dรฉbloquer
Unlock-ADAccount -Identity jdupont
# Vรฉrifier si verrouillรฉ
Get-ADUser -Identity jdupont -Properties LockedOut | Select-Object Name, LockedOut
# Trouver tous les comptes verrouillรฉs
Search-ADAccount -LockedOut | Select-Object Name, SamAccountName
Gestion des Groupes
Crรฉer et Gรฉrer des Groupes
# Crรฉer un groupe
New-ADGroup -Name "IT-Admins" -GroupScope Global -GroupCategory Security `
-Path "OU=Groups,DC=corp,DC=local"
# Types de groupes
# -GroupScope : DomainLocal, Global, Universal
# -GroupCategory : Security, Distribution
Ajouter / Retirer des Membres
# Ajouter un membre
Add-ADGroupMember -Identity "IT-Admins" -Members jdupont
# Ajouter plusieurs membres
Add-ADGroupMember -Identity "IT-Admins" -Members jdupont, mmartin, pdurand
# Retirer un membre
Remove-ADGroupMember -Identity "IT-Admins" -Members jdupont -Confirm:$false
Lister les Membres
# Membres directs
Get-ADGroupMember -Identity "IT-Admins"
# Membres rรฉcursifs (inclut les groupes imbriquรฉs)
Get-ADGroupMember -Identity "IT-Admins" -Recursive |
Select-Object Name, SamAccountName, objectClass
# Compter les membres
(Get-ADGroupMember -Identity "IT-Admins" -Recursive).Count
Groupes d'un Utilisateur
# Groupes directs d'un utilisateur
Get-ADPrincipalGroupMembership -Identity jdupont |
Select-Object Name
# Avec le DN complet
Get-ADUser -Identity jdupont -Properties MemberOf |
Select-Object -ExpandProperty MemberOf
Audit & Sรฉcuritรฉ AD
Comptes Inactifs (Stale Accounts)
# Comptes non connectรฉs depuis 90 jours
$90days = (Get-Date).AddDays(-90)
Get-ADUser -Filter 'LastLogonDate -lt $90days' -Properties LastLogonDate |
Select-Object Name, SamAccountName, LastLogonDate, Enabled |
Sort-Object LastLogonDate
# Utiliser Search-ADAccount (plus prรฉcis)
Search-ADAccount -AccountInactive -TimeSpan 90.00:00:00 -UsersOnly |
Select-Object Name, SamAccountName, LastLogonDate
# Comptes jamais connectรฉs
Search-ADAccount -AccountInactive -UsersOnly |
Where-Object { $_.LastLogonDate -eq $null } |
Select-Object Name, SamAccountName, Created
Mots de Passe Expirรฉs / Problรจmes
# Comptes avec mot de passe expirรฉ
Search-ADAccount -PasswordExpired |
Select-Object Name, SamAccountName, PasswordExpired
# Comptes avec mot de passe qui n'expire jamais (RISQUE)
Get-ADUser -Filter 'PasswordNeverExpires -eq $true' -Properties PasswordNeverExpires |
Select-Object Name, SamAccountName
# Comptes sans mot de passe requis (CRITIQUE)
Get-ADUser -Filter 'PasswordNotRequired -eq $true' -Properties PasswordNotRequired |
Select-Object Name, SamAccountName
Audit des Privilรจges (Domain Admins)
# Membres du groupe Domain Admins
Get-ADGroupMember -Identity "Domain Admins" -Recursive |
Select-Object Name, SamAccountName, objectClass
# Membres du groupe Enterprise Admins
Get-ADGroupMember -Identity "Enterprise Admins" -Recursive |
Select-Object Name, SamAccountName
# Membres du groupe Administrators
Get-ADGroupMember -Identity "Administrators" -Recursive |
Select-Object Name, SamAccountName
# Audit complet des groupes privilรฉgiรฉs
$privilegedGroups = @("Domain Admins", "Enterprise Admins", "Schema Admins", "Administrators")
foreach ($group in $privilegedGroups) {
Write-Host "=== $group ===" -ForegroundColor Yellow
Get-ADGroupMember -Identity $group -Recursive |
Select-Object Name, SamAccountName
}
Rapport d'Audit Complet
# Export des comptes ร risque
$report = @()
# Comptes inactifs
$report += Search-ADAccount -AccountInactive -TimeSpan 90.00:00:00 -UsersOnly |
Select-Object Name, SamAccountName, @{N='Issue';E={'Inactive 90+ days'}}
# Mots de passe expirรฉs
$report += Search-ADAccount -PasswordExpired |
Select-Object Name, SamAccountName, @{N='Issue';E={'Password Expired'}}
# Password Never Expires
$report += Get-ADUser -Filter 'PasswordNeverExpires -eq $true' |
Select-Object Name, SamAccountName, @{N='Issue';E={'Password Never Expires'}}
# Export CSV
$report | Export-Csv -Path "AD_Audit_Report.csv" -NoTypeInformation
FSMO & Santรฉ Domaine
Rรดles FSMO
# Voir tous les rรดles FSMO du domaine
Get-ADDomain | Select-Object InfrastructureMaster, RIDMaster, PDCEmulator
# Voir les rรดles FSMO de la forรชt
Get-ADForest | Select-Object DomainNamingMaster, SchemaMaster
# Commande complรจte
netdom query fsmo
| Rรดle | Portรฉe | Description |
|---|---|---|
| Schema Master | Forรชt | Modifications du schรฉma AD |
| Domain Naming Master | Forรชt | Ajout/suppression de domaines |
| RID Master | Domaine | Attribution des RID (SID) |
| PDC Emulator | Domaine | Auth, GPO, temps |
| Infrastructure Master | Domaine | Rรฉfรฉrences inter-domaines |
Vรฉrifier la Rรฉplication
# รtat de la rรฉplication
Get-ADReplicationPartnerMetadata -Target "dc01.corp.local" |
Select-Object Partner, LastReplicationSuccess, LastReplicationResult
# Tous les DCs
Get-ADDomainController -Filter * |
ForEach-Object {
Get-ADReplicationPartnerMetadata -Target $_.HostName
} | Select-Object Server, Partner, LastReplicationSuccess
# รchecs de rรฉplication
Get-ADReplicationFailure -Target "dc01.corp.local"
# Outil classique (CMD)
repadmin /replsummary
repadmin /showrepl
Santรฉ des Domain Controllers
# Lister les DCs
Get-ADDomainController -Filter * |
Select-Object Name, IPv4Address, Site, IsGlobalCatalog, OperatingSystem
# Vรฉrifier les services AD
Get-Service -ComputerName dc01 -Name NTDS, DNS, Netlogon, W32Time |
Select-Object Name, Status
# Test de connectivitรฉ DC
Test-ComputerSecureChannel -Server dc01.corp.local
Architecture d'Entreprise Sรฉcurisรฉe (Tiering Model)
Concept : Sรฉparation des Domaines Administration vs Utilisateurs
Modรจle de sรฉparation en deux domaines pour respecter le principe de moindre privilรจge :
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ ARCHITECTURE CLASSIQUE (RISQUรE) โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ โ
โ Un seul domaine : corp.internal โ
โ โ
โ โ Admins et utilisateurs dans le mรชme domaine โ
โ โ Un utilisateur compromis peut voir les admins โ
โ โ Pass-the-Hash peut cibler les comptes admin โ
โ โ GPO peuvent รชtre modifiรฉes par des comptes non-admin โ
โ โ
โ Risque : รlรฉvation de privilรจges triviale โ
โ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ ARCHITECTURE SรCURISรE (TIERING) โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ โ
โ Deux domaines sรฉparรฉs : โ
โ โ
โ 1. admin.corp.internal (Domaine d'Administration) โ
โ - Comptes privilรฉgiรฉs uniquement โ
โ - PAW (Privileged Access Workstation) uniquement โ
โ - Isolation rรฉseau stricte (VLAN dรฉdiรฉ) โ
โ โ
โ 2. users.corp.internal (Domaine Utilisateurs) โ
โ - Comptes utilisateurs standards โ
โ - Postes de travail standards โ
โ - Serveurs d'application โ
โ โ
โ Trust Unidirectionnel : admin โ users โ
โ (Admin peut gรฉrer User, User ne voit pas Admin) โ
โ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
Bรฉnรฉfices : - โ Isolation des privilรจges : Un compte utilisateur compromis ne peut pas voir les comptes admin - โ Limitation du Pass-the-Hash : Les hash des comptes admin ne sont pas prรฉsents sur les postes utilisateurs - โ Segmentation rรฉseau : VLAN sรฉparรฉs pour admin et users - โ Conformitรฉ SecNumCloud : Sรฉparation des environnements d'administration
Trust Unidirectionnel (Admin Trust User)
Configuration du Trust :
# Sur le domaine ADMIN (admin.corp.internal)
# Crรฉer le trust unidirectionnel
# admin.corp.internal fait confiance ร users.corp.internal (incoming trust)
# users.corp.internal NE fait PAS confiance ร admin.corp.internal
# Crรฉer le trust (exรฉcutรฉ depuis admin.corp.internal)
New-ADTrust -Name users.corp.internal `
-Type Forest `
-Direction OneWay `
-RemoteDomainName users.corp.internal `
-TrustPassword (Read-Host -AsSecureString "Enter trust password")
# Vรฉrifier le trust
Get-ADTrust -Filter * | Select-Object Name, Direction, TrustType
# Output attendu :
# Name Direction TrustType
# ---- --------- ---------
# users.corp.internal OneWay Forest
Commandes netdom (alternative) :
REM Sur le domaine ADMIN (srv-dc-admin-01.admin.corp.internal)
REM Crรฉer le trust unidirectionnel
netdom trust admin.corp.internal /domain:users.corp.internal /add /oneway:trustING
REM Explication :
REM - admin.corp.internal = Domaine qui REรOIT la confiance (trusting domain)
REM - users.corp.internal = Domaine qui ACCORDE la confiance (trusted domain)
REM - /oneway:trustING = admin fait confiance ร users (unidirectionnel)
REM Vรฉrifier le trust
netdom trust admin.corp.internal /domain:users.corp.internal /verify
REM Output attendu :
REM The trust relationship between admin.corp.internal and users.corp.internal was successfully verified.
Tester le Trust :
# Depuis admin.corp.internal, rechercher un utilisateur de users.corp.internal
Get-ADUser -Identity "jdupont" -Server "users.corp.internal"
# Ajouter un utilisateur de users.corp.internal ร un groupe de admin.corp.internal
Add-ADGroupMember -Identity "MyCorp-Admins" `
-Members "USERS\jdupont" `
-Server "admin.corp.internal"
# โ Fonctionne : admin peut gรฉrer users
# ========================================
# Depuis users.corp.internal, rechercher un utilisateur de admin.corp.internal
Get-ADUser -Identity "admin_jdupont" -Server "admin.corp.internal"
# โ รCHOUE : users ne peut PAS voir admin (trust unidirectionnel)
# Output : Get-ADUser : Cannot find an object with identity: 'admin_jdupont'
Matrice de Confiance :
| Action | admin.corp.internal โ users.corp.internal | users.corp.internal โ admin.corp.internal |
|---|---|---|
| Voir les utilisateurs | โ Oui | โ Non (trust unidirectionnel) |
| Authentifier les utilisateurs | โ Oui | โ Non |
| Appliquer des GPO | โ Oui (cross-domain) | โ Non |
| Dรฉlรฉguer des permissions | โ Oui | โ Non |
Flux Rรฉseau Requis pour Active Directory
Matrix des Flux (Anonymisรฉe) :
| Source | Destination | Port | Protocole | Service | Description |
|---|---|---|---|---|---|
| Client | DC | 53 | TCP/UDP | DNS | Rรฉsolution de noms |
| Client | DC | 88 | TCP/UDP | Kerberos | Authentification |
| Client | DC | 135 | TCP | RPC Endpoint Mapper | Communication RPC |
| Client | DC | 137 | UDP | NetBIOS Name Service | Rรฉsolution NetBIOS (legacy) |
| Client | DC | 138 | UDP | NetBIOS Datagram | Communication NetBIOS (legacy) |
| Client | DC | 139 | TCP | NetBIOS Session | Session NetBIOS (legacy) |
| Client | DC | 389 | TCP/UDP | LDAP | Requรชtes AD |
| Client | DC | 445 | TCP | SMB/CIFS | Partages rรฉseau, SYSVOL, NETLOGON |
| Client | DC | 636 | TCP | LDAPS | LDAP sรฉcurisรฉ (SSL/TLS) |
| Client | DC | 3268 | TCP | Global Catalog | Recherche AD inter-domaines |
| Client | DC | 3269 | TCP | Global Catalog SSL | GC sรฉcurisรฉ (SSL/TLS) |
| Client | DC | 49152-65535 | TCP | RPC Dynamic | Ports รฉphรฉmรจres RPC |
| DC | DC | 53 | TCP/UDP | DNS | Rรฉplication zones DNS |
| DC | DC | 135 | TCP | RPC | Rรฉplication AD |
| DC | DC | 389 | TCP | LDAP | Rรฉplication AD |
| DC | DC | 445 | TCP | SMB | Rรฉplication SYSVOL (DFS-R) |
| DC | DC | 3268 | TCP | Global Catalog | Rรฉplication GC |
Flux Simplifiรฉs (Production) :
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ VLAN ADMIN (10.10.1.0/24) โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ โ
โ srv-dc-admin-01 (10.10.1.10) โโโโโโโโโโโ โ
โ srv-dc-admin-02 (10.10.1.11) โ โ
โ โ โ
โ paw-admin-01 (10.10.1.100) โโโโโโโโโโโโโโ โ
โ โ
โ Flux autorisรฉs : โ
โ - PAW โ DC : 53, 88, 135, 389, 445, 636, 3268 โ
โ - DC โ DC : 53, 135, 389, 445, 3268 (rรฉplication) โ
โ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Trust Unidirectionnel
โ (admin โ users)
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ VLAN USERS (10.20.1.0/24) โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ โ
โ srv-dc-users-01 (10.20.1.10) โ
โ srv-dc-users-02 (10.20.1.11) โ
โ โ
โ pc-user-01 (10.20.1.100) โ
โ pc-user-02 (10.20.1.101) โ
โ โ
โ Flux autorisรฉs : โ
โ - PC โ DC : 53, 88, 389, 445, 636 โ
โ - DC โ DC : 53, 135, 389, 445, 3268 (rรฉplication) โ
โ - DC โ DC Admin : 88, 389, 636, 3268 (trust) โ
โ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
Rรจgles Firewall (Windows Defender Firewall) :
# Sur les DCs du domaine ADMIN
# Autoriser les flux depuis les PAW uniquement (VLAN Admin)
New-NetFirewallRule -DisplayName "AD-LDAP-PAW" `
-Direction Inbound `
-Protocol TCP `
-LocalPort 389, 636, 3268, 3269 `
-RemoteAddress 10.10.1.0/24 `
-Action Allow
New-NetFirewallRule -DisplayName "AD-Kerberos-PAW" `
-Direction Inbound `
-Protocol TCP, UDP `
-LocalPort 88 `
-RemoteAddress 10.10.1.0/24 `
-Action Allow
New-NetFirewallRule -DisplayName "AD-DNS-PAW" `
-Direction Inbound `
-Protocol TCP, UDP `
-LocalPort 53 `
-RemoteAddress 10.10.1.0/24 `
-Action Allow
# Autoriser les flux de rรฉplication entre DCs Admin
New-NetFirewallRule -DisplayName "AD-Replication-DCs" `
-Direction Inbound `
-Protocol TCP `
-LocalPort 135, 389, 445, 3268 `
-RemoteAddress 10.10.1.10, 10.10.1.11 `
-Action Allow
# Bloquer tout le reste
New-NetFirewallRule -DisplayName "AD-Block-Default" `
-Direction Inbound `
-Protocol Any `
-Action Block `
-Priority 1000
Ports รphรฉmรจres RPC (49152-65535)
Ne PAS ouvrir toute la plage 49152-65535 sur le firewall !
Solution : Fixer les ports RPC dynamiques ร une plage restreinte (ex: 50000-50100).
# Fixer la plage RPC (sur les DCs)
netsh int ipv4 set dynamicport tcp start=50000 num=100
netsh int ipv4 set dynamicport udp start=50000 num=100
# Puis ouvrir uniquement 50000-50100 sur le firewall
New-NetFirewallRule -DisplayName "AD-RPC-Dynamic" `
-Direction Inbound `
-Protocol TCP `
-LocalPort 50000-50100 `
-RemoteAddress 10.10.1.0/24 `
-Action Allow
GPO Cross-Domain (Appliquer des GPO depuis Admin vers Users)
Scรฉnario : Appliquer une GPO de sรฉcuritรฉ depuis le domaine admin.corp.internal vers les utilisateurs de users.corp.internal.
Prรฉrequis :
- Trust unidirectionnel configurรฉ (admin โ users)
- Permissions dรฉlรฉguรฉes sur l'OU cible dans users.corp.internal
รtape 1 : Crรฉer la GPO dans le domaine Admin
# Connexion au domaine ADMIN
$adminDomain = "admin.corp.internal"
# Crรฉer la GPO dans le domaine Admin
New-GPO -Name "Security-Baseline-CrossDomain" -Domain $adminDomain
# Configurer la GPO (exemple : dรฉsactiver SMBv1)
Set-GPRegistryValue -Name "Security-Baseline-CrossDomain" `
-Domain $adminDomain `
-Key "HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" `
-ValueName "SMB1" `
-Type DWord `
-Value 0
# Configurer l'audit des processus (Event ID 4688)
Set-GPRegistryValue -Name "Security-Baseline-CrossDomain" `
-Domain $adminDomain `
-Key "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System\Audit" `
-ValueName "ProcessCreationIncludeCmdLine_Enabled" `
-Type DWord `
-Value 1
รtape 2 : Lier la GPO ร une OU du domaine Users
# Connexion au domaine USERS
$usersDomain = "users.corp.internal"
$targetOU = "OU=Workstations,DC=users,DC=corp,DC=internal"
# Lier la GPO (cross-domain)
New-GPLink -Name "Security-Baseline-CrossDomain" `
-Domain $adminDomain `
-Target $targetOU `
-LinkEnabled Yes `
-Enforced Yes
# Vรฉrifier le lien
Get-GPInheritance -Target $targetOU | Select-Object -ExpandProperty GpoLinks
# Output attendu :
# DisplayName Enabled Enforced Order
# ----------- ------- -------- -----
# Security-Baseline-CrossDomain Yes Yes 1
รtape 3 : Dรฉlรฉguer les Permissions (si nรฉcessaire)
Si la liaison รฉchoue avec "Access Denied", dรฉlรฉguer les permissions sur l'OU cible :
# Sur le domaine USERS (srv-dc-users-01)
# Importer le module
Import-Module ActiveDirectory
# Dรฉlรฉguer "Apply Group Policy" au groupe admin du domaine Admin
$targetOU = "OU=Workstations,DC=users,DC=corp,DC=internal"
$adminGroup = "ADMIN\MyCorp-GPO-Admins"
# Obtenir l'ACL actuelle
$acl = Get-Acl -Path "AD:\$targetOU"
# Crรฉer la rรจgle ACE (Apply Group Policy)
$identity = New-Object System.Security.Principal.NTAccount($adminGroup)
$inheritanceType = [System.DirectoryServices.ActiveDirectorySecurityInheritance]::All
$accessRule = New-Object System.DirectoryServices.ActiveDirectoryAccessRule(
$identity,
[System.DirectoryServices.ActiveDirectoryRights]::GenericRead,
[System.Security.AccessControl.AccessControlType]::Allow,
$inheritanceType
)
# Appliquer la rรจgle
$acl.AddAccessRule($accessRule)
Set-Acl -Path "AD:\$targetOU" -AclObject $acl
รtape 4 : Forcer l'Application de la GPO
# Sur un poste du domaine USERS (pc-user-01.users.corp.internal)
# Forcer la mise ร jour GPO
gpupdate /force
# Vรฉrifier les GPO appliquรฉes
gpresult /r /scope:computer
# Output attendu :
# Applied Group Policy Objects
# -----------------------------
# Security-Baseline-CrossDomain
# Default Domain Policy
Vรฉrification avec RSOP (Resultant Set of Policy) :
# Gรฉnรฉrer un rapport HTML des GPO appliquรฉes
gpresult /h C:\Temp\gporesult.html
# Ouvrir le rapport et vรฉrifier que "Security-Baseline-CrossDomain" apparaรฎt
# dans la section "Computer Configuration"
Schรฉma de l'Architecture Cross-Domain GPO :
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ DOMAINE ADMIN (admin.corp.internal) โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ GPO: Security-Baseline-CrossDomain โ โ
โ โ - Dรฉsactiver SMBv1 โ โ
โ โ - Audit Process Creation (4688) โ โ
โ โ - Forcer AES-256 Kerberos โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ โ
โ โ Link (GPO Link) โ
โ โ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โ Trust Unidirectionnel
โ (admin โ users)
โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ DOMAINE USERS (users.corp.internal) โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ โ โ
โ OU=Workstations โ GPO appliquรฉe ici โ
โ โโโ pc-user-01 โ
โ โโโ pc-user-02 โ
โ โโโ pc-user-03 โ
โ โ
โ Rรฉsultat : Les postes reรงoivent la GPO du domaine Admin โ
โ (politique de sรฉcuritรฉ centralisรฉe) โ
โ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
Cas d'Usage Production :
| GPO | Domaine Source | Domaine Cible | Objectif |
|---|---|---|---|
| Security-Baseline | admin.corp.internal | users.corp.internal | Hardening (SMBv1, TLS, Audit) |
| Password-Policy | admin.corp.internal | users.corp.internal | Complexitรฉ mots de passe |
| Firewall-Rules | admin.corp.internal | users.corp.internal | Rรจgles Windows Defender |
| Antivirus-Config | admin.corp.internal | users.corp.internal | Configuration Defender ATP |
Surveillance des GPO Cross-Domain :
# Lister toutes les GPO liรฉes ร une OU (incluant cross-domain)
Get-GPInheritance -Target "OU=Workstations,DC=users,DC=corp,DC=internal" |
Select-Object -ExpandProperty GpoLinks |
Select-Object DisplayName, Enabled, Enforced, @{N='Domain';E={
(Get-GPO -Name $_.DisplayName).DomainName
}}
# Output :
# DisplayName Enabled Enforced Domain
# ----------- ------- -------- ------
# Security-Baseline-CrossDomain True True admin.corp.internal
# Default Domain Policy True False users.corp.internal
Rรฉfรฉrence Rapide
# === MODULE ===
Import-Module ActiveDirectory
# === USERS ===
Get-ADUser -Identity jdupont -Properties *
Get-ADUser -Filter 'Department -eq "IT"'
New-ADUser -Name "User" -SamAccountName "user" -Enabled $true
Set-ADUser -Identity jdupont -Department "Security"
Unlock-ADAccount -Identity jdupont
# === GROUPS ===
Get-ADGroupMember -Identity "IT-Admins" -Recursive
Add-ADGroupMember -Identity "IT-Admins" -Members jdupont
Get-ADPrincipalGroupMembership -Identity jdupont
# === AUDIT ===
Search-ADAccount -AccountInactive -TimeSpan 90.00:00:00
Search-ADAccount -PasswordExpired
Search-ADAccount -LockedOut
Get-ADGroupMember -Identity "Domain Admins" -Recursive
# === FSMO & REPLICATION ===
Get-ADDomain | Select-Object PDCEmulator, RIDMaster, InfrastructureMaster
Get-ADReplicationPartnerMetadata -Target dc01
repadmin /replsummary