170 lines
7.8 KiB
PowerShell
170 lines
7.8 KiB
PowerShell
# exportDomain.ps1 - Exécuter sur Windows 2022 AD
|
|
# Script complet d'exportation vers format csv
|
|
|
|
# Installer le module PowerShell-Yaml si nécessaire
|
|
# Install-Module powershell-yaml -Force
|
|
|
|
Write-Host "=== Début de l'extraction Active Directory ==="
|
|
|
|
# ===== EXTRACTION DU DOMAINE =====
|
|
Write-Host "1. Extraction des informations de domaine..."
|
|
$Domain = Get-ADDomain
|
|
$DomainData = @{
|
|
'DomainSID' = $Domain.DomainSID.Value
|
|
'DomainName' = $Domain.Name
|
|
'DNSRoot' = $Domain.DNSRoot
|
|
'NetBIOSName' = $Domain.NetBIOSName
|
|
'DomainMode' = $Domain.DomainMode.ToString()
|
|
'ForestMode' = $Domain.Forest
|
|
'PDCEmulator' = $Domain.PDCEmulator
|
|
'RIDMaster' = $Domain.RIDMaster
|
|
'InfrastructureMaster' = $Domain.InfrastructureMaster
|
|
}
|
|
|
|
# ===== EXTRACTION DES UTILISATEURS =====
|
|
Write-Host "2. Extraction des utilisateurs..."
|
|
$Users = Get-ADUser -Filter * -Properties *
|
|
$UserExport = @()
|
|
|
|
foreach ($User in $Users) {
|
|
# Exclure les comptes système par défaut
|
|
# if ($User.SamAccountName -notmatch '^(Administrator|Guest|krbtgt|DefaultAccount|WDAGUtilityAccount)$') {
|
|
if ($User.SamAccountName -notmatch '^(Administrator|Guest|Administrateur|Invité|krbtgt|DefaultAccount|WDAGUtilityAccount)$') {
|
|
$UserData = [PSCustomObject]@{
|
|
'UGIVEN' = if ($User.GivenName) { $User.GivenName } else { "" }
|
|
'LOGIN' = $User.SamAccountName
|
|
'OBJECTSID' = $User.SID.Value
|
|
'UNAME' = if ($User.Surname) { $User.Surname } else { "" }
|
|
}
|
|
$UserExport += $UserData
|
|
}
|
|
}
|
|
|
|
# ===== EXTRACTION DES ORDINATEURS =====
|
|
Write-Host "3. Extraction des ordinateurs..."
|
|
$Computers = Get-ADComputer -Filter * -Properties *
|
|
$ComputerExport = @()
|
|
|
|
foreach ($Computer in $Computers) {
|
|
# Exclure les contrôleurs de domaine
|
|
if ($Computer.Name -notmatch '^(DC|DOMAIN)') {
|
|
$ComputerData = [PSCustomObject]@{
|
|
'NAME' = $Computer.Name
|
|
'OBJECTSID' = $Computer.SID.Value
|
|
}
|
|
$ComputerExport += $ComputerData
|
|
}
|
|
}
|
|
|
|
# ===== EXTRACTION DES GROUPES =====
|
|
Write-Host "4. Extraction des groupes..."
|
|
$Groups = Get-ADGroup -Filter * -Properties *
|
|
$GroupExport = @()
|
|
|
|
foreach ($Group in $Groups) {
|
|
# Exclure les groupes système par défaut
|
|
$SystemGroups = @(
|
|
# Groupes de domaine en français
|
|
'Admins du domaine', 'Utilisateurs du domaine', 'Invités du domaine', 'Ordinateurs du domaine',
|
|
'Administrateurs', 'Utilisateurs', 'Invités', 'Utilisateurs avec pouvoirs', 'Opérateurs de sauvegarde',
|
|
'Duplicateurs', 'Opérateurs de configuration réseau', 'Utilisateurs de l''Analyseur de performances',
|
|
'Utilisateurs du journal de performances', 'Utilisateurs du modèle COM distribué', 'IIS_IUSRS',
|
|
'Opérateurs de chiffrement', 'Lecteurs des journaux d''événements', 'Accès DCOM service de certificats',
|
|
'Serveurs Accès Distant RDS', 'Serveurs RDS Endpoint', 'Serveurs Gestion RDS',
|
|
'Administrateurs Hyper-V', 'Opérateurs d''assistance de contrôle d''accès',
|
|
'Utilisateurs de gestion à distance', 'Administrateurs de réplication de stockage',
|
|
'Administrateurs du schéma', 'Administrateurs de l''entreprise', 'Éditeurs de certificats', 'Contrôleurs de domaine',
|
|
'Propriétaires créateurs de la stratégie de groupe', 'Serveurs RAS et IAS', 'Opérateurs de serveur',
|
|
'Opérateurs de compte', 'Opérateurs d''impression', 'Accès compatible pré-Windows 2000',
|
|
'Générateurs d''approbations de forêt entrante', 'Groupe d''accès d''autorisation Windows',
|
|
'Serveurs de licences des services Terminal Server', 'Utilisateurs DHCP', 'Administrateurs DHCP',
|
|
'DnsAdmins', 'DnsUpdateProxy', 'Utilisateurs WINS', 'IIS_WPG',
|
|
'Groupe de réplication dont le mot de passe RODC est refusé', 'Groupe de réplication dont le mot de passe RODC est autorisé',
|
|
'Contrôleurs de domaine d''entreprise en lecture seule', 'Contrôleurs de domaine en lecture seule',
|
|
'Contrôleurs de domaine clonables', 'Utilisateurs protégés', 'Administrateurs clés',
|
|
'Administrateurs clés Enterprise',
|
|
# Noms anglais pour compatibilité (au cas où certains groupes gardent leur nom anglais)
|
|
'Domain Admins', 'Domain Users', 'Domain Guests', 'Domain Computers',
|
|
'Administrators', 'Users', 'Guests', 'Power Users', 'Backup Operators',
|
|
'Replicator', 'Network Configuration Operators', 'Performance Monitor Users',
|
|
'Performance Log Users', 'Distributed COM Users',
|
|
'Cryptographic Operators', 'Event Log Readers', 'Certificate Service DCOM Access',
|
|
'RDS Remote Access Servers', 'RDS Endpoint Servers', 'RDS Management Servers',
|
|
'Hyper-V Administrators', 'Access Control Assistance Operators',
|
|
'Remote Management Users', 'Storage Replica Administrators',
|
|
'Schema Admins', 'Enterprise Admins', 'Cert Publishers', 'Domain Controllers',
|
|
'Group Policy Creator Owners', 'RAS and IAS Servers', 'Server Operators',
|
|
'Account Operators', 'Print Operators', 'Pre-Windows 2000 Compatible Access',
|
|
'Incoming Forest Trust Builders', 'Windows Authorization Access Group',
|
|
'Terminal Server License Servers', 'DHCP Users', 'DHCP Administrators',
|
|
'Denied RODC Password Replication Group', 'Allowed RODC Password Replication Group',
|
|
'Enterprise Read-only Domain Controllers', 'Read-only Domain Controllers',
|
|
'Cloneable Domain Controllers', 'Protected Users', 'Key Admins',
|
|
'Enterprise Key Admins'
|
|
)
|
|
|
|
if ($Group.Name -notin $SystemGroups -and $Group.SamAccountName -notmatch '\$$') {
|
|
$GroupData = [PSCustomObject]@{
|
|
'NAME' = $Group.Name
|
|
'OBJECTSID' = $Group.SID.Value
|
|
}
|
|
$GroupExport += $GroupData
|
|
}
|
|
}
|
|
|
|
# ===== CONSOLIDATION DES DONNÉES =====
|
|
Write-Host "5. Consolidation des donnees..."
|
|
$ConsolidatedData = @{
|
|
'ExportDate' = Get-Date -Format "yyyy-MM-dd HH:mm:ss"
|
|
'ExportedBy' = $env:USERNAME
|
|
'Domain' = $DomainData
|
|
'Users' = $UserExport
|
|
'Computers' = $ComputerExport
|
|
'Groups' = $GroupExport
|
|
'Statistics' = @{
|
|
'TotalUsers' = $UserExport.Count
|
|
'TotalComputers' = $ComputerExport.Count
|
|
'TotalGroups' = $GroupExport.Count
|
|
}
|
|
}
|
|
|
|
# Afficher un aperçu pour vérification
|
|
Write-Host "Aperçu des données exportées :"
|
|
Write-Host "Premier utilisateur : $($UserExport[0].LOGIN) - $($UserExport[0].UGIVEN) $($UserExport[0].UNAME)"
|
|
if ($ComputerExport.Count -gt 0) {
|
|
Write-Host "Premier ordinateur : $($ComputerExport[0].NAME)"
|
|
}
|
|
if ($GroupExport.Count -gt 0) {
|
|
Write-Host "Premier groupe : $($GroupExport[0].NAME)"
|
|
}
|
|
|
|
# ===== EXPORT VERS CSV =====
|
|
Write-Host "6. Export vers fichiers CSV..."
|
|
|
|
# Créer le répertoire temp s'il n'existe pas
|
|
if (!(Test-Path "C:\temp")) {
|
|
New-Item -ItemType Directory -Path "C:\temp" -Force
|
|
}
|
|
|
|
# Export complet en JSON pour référence
|
|
$ConsolidatedData | ConvertTo-Json -Depth 20 | Out-File -FilePath "C:\temp\ad_export_complete.json" -Encoding UTF8
|
|
|
|
# Exports individuels en CSV
|
|
$UserExport | Export-Csv -Path "C:\temp\users.csv" -NoTypeInformation -Encoding UTF8
|
|
$ComputerExport | Export-Csv -Path "C:\temp\computers.csv" -NoTypeInformation -Encoding UTF8
|
|
$GroupExport | Export-Csv -Path "C:\temp\groups.csv" -NoTypeInformation -Encoding UTF8
|
|
|
|
Write-Host ""
|
|
Write-Host "=== Resume ==="
|
|
Write-Host "Utilisateurs exportes : $($UserExport.Count)"
|
|
Write-Host "Ordinateurs exportes : $($ComputerExport.Count)"
|
|
Write-Host "Groupes exportes : $($GroupExport.Count)"
|
|
Write-Host "SID de domaine : $($DomainData.DomainSID)"
|
|
Write-Host ""
|
|
Write-Host "Fichiers generes :"
|
|
Write-Host "- C:\temp\ad_export_complete.json (export complet)"
|
|
Write-Host "- C:\temp\users.csv (format CSV)"
|
|
Write-Host "- C:\temp\computers.csv (format CSV)"
|
|
Write-Host "- C:\temp\groups.csv (format CSV)"
|
|
Write-Host ""
|
|
Write-Host "Extraction terminee avec succes" |