Version 0.4.0 — outil portable de diagnostic AD
Remplaçant moderne de Active Directory Replication Status Tool (ARST) de Microsoft, non maintenu depuis 2014. Application WPF (.NET Framework 4.8) qui audite la santé d'une forêt Active Directory (réplication, DNS, réseau), sans dépendance externe ni installation, dans un exécutable d'environ 200 Ko.
- Inventaire DC — découverte automatique des contrôleurs de domaine d'une forêt (sites, OS, IP, FSMO, GC, RODC) sans RSAT
- Mode DC seul — auditer un DC précis sans énumérer toute la forêt (gain de temps sur les grandes infras)
- Matrice de réplication — liens entre DC avec statut Healthy / Warning / Failing / Unreachable, sondage parallélisé
- Échecs actifs — détection et classification des erreurs de réplication en cours (sévérité Recent / Sustained / Critical)
- Topologie inter-sites — sites, subnets, têtes de pont, site links et coûts
- Santé DNS — vérification des 4 SRV critiques (
_ldap,_kerberos,_gc,_kpasswd) et résolution des enregistrements A de chaque DC, via P/InvokeDnsQuery_W(zéro dépendance externe) - Santé réseau — tests de connectivité TCP sur 9 ports AD (53, 88, 135, 389, 445, 464, 636, 3268, 3269), distinction Closed / Timeout pour faciliter le diagnostic firewall vs service down
- Score de santé tripartite — note 0/100 pondérée Réplication 50 % / DNS 25 % / Réseau 25 %, avec niveaux Excellent / Warning / Critical et renormalisation automatique des poids si une sonde est absente
ADReplic identifie automatiquement les anomalies de configuration et de structure, avec une recommandation de correction pour chacune :
| Code | Sévérité | Détecte |
|---|---|---|
DC_ISOLATED |
Critical | Contrôleur de domaine absent de tous les liens de réplication |
OS_UNSUPPORTED |
Critical | Windows Server 2003 / 2008 / 2008 R2 (hors support total) |
OS_OUT_OF_EXTENDED_SUPPORT |
Warning | Windows Server 2012 / 2012 R2 (hors support étendu depuis octobre 2023) |
OS_UNKNOWN |
Info | Version d'OS non reconnue |
DOMAIN_SINGLE_DC |
Warning | Domaine avec un seul contrôleur (SPOF) |
SITE_NO_BRIDGEHEAD |
Warning | Site avec des DC mais sans serveur tête de pont |
SITE_NO_SUBNET |
Warning | Site avec des DC mais sans subnet IP associé |
SITE_NO_DC |
Info | Site déclaré sans aucun DC |
SITE_LINK_COST_ABERRANT |
Warning | Coût de site link hors plage 1-10000 |
DNS_SRV_CRITICAL_MISSING |
Critical | Enregistrement SRV _ldap ou _kerberos introuvable |
DNS_SRV_OPTIONAL_MISSING |
Warning | Enregistrement SRV _gc ou _kpasswd introuvable |
DNS_RESOLUTION_ERROR |
Warning | Erreur d'infrastructure DNS (SERVFAIL, serveur injoignable) |
DNS_DC_A_RECORD_MISSING |
Critical | DC sans enregistrement A résolvable |
PORT_CRITICAL_CLOSED |
Critical | Port AD critique (389/88/445) fermé ou en timeout |
PORT_CLOSED_OR_FILTERED |
Warning | Port AD secondaire fermé ou en timeout |
- Forêt cible — interroger une forêt distante depuis un poste hors-domaine
- Identifiants alternatifs — authentification UPN ou DOMAINE\compte
- Thème clair / sombre — bascule en un clic, préférence persistée dans
%APPDATA% - Exports — CSV (8 fichiers), JSON (snapshot complet) et HTML autonome avec CSS inline
- 8 onglets — Contrôleurs, Échecs actifs, Réplication, Sites, Liens inter-sites, Diagnostics, Santé DNS, Santé réseau
- Menu contextuel — clic droit sur un DC pour l'auditer en mode ciblé
- Module PowerShell binaire — 8 cmdlets (
Get-ADRDcInventory,Get-ADRReplicationStatus,Get-ADRReplicationFailure,Get-ADRTopology,Get-ADRIssue,Get-ADRDnsHealth,Get-ADRPortHealth,Export-ADRAudit) + 1 fonction (Register-ADRScheduledAuditpour planifier des audits récurrents via Task Scheduler) - Module legacy
ADForestAudit— surcouche PowerShell avec API FR + alias EN (compatibilité scripts existants) - Portable — exécutable single-file ~200 Ko, lançable depuis une clé USB, zéro install
- Windows 10 / 11 ou Windows Server 2016+
- .NET Framework 4.8 (présent nativement sur Windows 10 1903+ et Windows Server 2019+)
- Compte avec droits de lecture sur l'AD cible (lecture des partitions Configuration et Domain)
- Aucune dépendance RSAT requise
| Couche | Technologie |
|---|---|
| UI | WPF .NET Framework 4.8, MVVM fait main, sans framework externe |
| AD | System.DirectoryServices.ActiveDirectory (zéro dépendance RSAT) |
| DNS | P/Invoke DnsQuery_W (dnsapi.dll), zéro dépendance NuGet |
| Réseau | System.Net.Sockets.TcpClient natif, parallélisme SemaphoreSlim |
| PowerShell | Module binaire .NET Framework 4.8 + module script imbriqué |
| Tests | xUnit (253 tests verts) |
| Build | SDK-style csproj, single-file publish |
src/
├── ADReplic.Core/ — DLL avec toute la logique métier (testable, sans UI)
│ ├── Abstractions/ — Interfaces (IDcInventoryProvider, IReplicationProbe, IDnsHealthProbe, IPortHealthProbe, ...)
│ ├── Ad/ — DirectoryContextFactory (création contexte AD)
│ ├── Diagnostics/ — Score tripartite, classifier d'erreurs, sévérité, Win32 messages FR
│ │ └── Issues/ — 13 détecteurs d'anomalies + IssueAggregator
│ ├── Discovery/ — DcInventoryProvider (GetAllAsync + GetSingleAsync)
│ ├── Export/ — CSV, JSON, HTML exporters + AuditSnapshotBuilder
│ ├── Health/ — Sondes DNS et réseau
│ │ ├── Dns/ — Win32DnsResolver (P/Invoke), DnsHealthProbe, DnsSrvNames
│ │ └── Ports/ — TcpPortProber, PortHealthProbe, AdServicePorts
│ ├── Models/ — DTO (DomainControllerInfo, ReplicationLink, HealthScore, DetectedIssue, DnsCheckResult, PortCheckResult, ...)
│ ├── Replication/ — ReplicationProbe, status evaluator, partition classifier
│ └── Topology/ — TopologyProvider (sites, subnets, site links)
│
├── ADReplic.App/ — WPF MVVM (UI uniquement)
│ ├── Mvvm/ — RelayCommand, AsyncRelayCommand, ViewModelBase
│ ├── Resources/ — ADReplic.ico (multi-résolution, généré depuis le XAML)
│ ├── Themes/ — LightTheme.xaml, DarkTheme.xaml, ThemeManager
│ ├── ViewModels/ — MainViewModel, Converters
│ └── Views/ — MainWindow, CredentialsDialog, AboutDialog
│
├── ADReplic.PowerShell/ — Cmdlets binaires + script imbriqué (planification)
│ ├── ADReplic.psd1 — Manifeste module
│ ├── ADReplic.Scheduling.psm1 — Register-ADRScheduledAudit (NestedModules)
│ ├── Cmdlets/ — 8 cmdlets (DcInventory, ReplicationStatus, Failure, Topology, Issue, DnsHealth, PortHealth, Export)
│ └── Internal/ — AuditContextBuilder
│
└── ADForestAudit/ — Module legacy refactoré (PowerShell pur)
├── ADForestAudit.psd1
├── ADForestAudit.psm1 — Surcouche sur ADReplic.PowerShell, ajoute alias EN
└── Scripts/Invoke-ADForestAudit.ps1
tests/
└── ADReplic.Core.Tests/ — xUnit, 253 tests
build/
├── publish.ps1 — Produit le pack portable dans dist/
└── Generate-Icon.ps1 — Régénère l'icone .ico multi-résolution depuis le XAML
Release.ps1 — Orchestrateur de release (bump + build + test + pack + tag local)
- .NET Framework 4.8 plutôt que .NET 8 : présent nativement sur Windows 10/11 et Server 2019+, zéro install client, exécutable single-file léger.
- WPF MVVM fait main : pas de dépendance CommunityToolkit ou MVVM Light, le code est plus simple à auditer et l'exécutable plus léger.
System.DirectoryServices.ActiveDirectory: librairie native .NET, pas besoin de RSAT ni d'AD PowerShell module sur le poste qui exécute ADReplic.- P/Invoke
DnsQuery_W:System.Net.Dnsne supporte pas les records SRV, et plutôt qu'embarquer une lib NuGet (DnsClient.NET ~200 Ko), on appelle directement l'API Win32 via P/Invoke avec marshaling propre des structuresDNS_RECORDW/DNS_SRV_DATAW. - Single-file publish : un seul
.exeà copier sur clé USB, pas de DLL à traîner. - Localisation FR de bout en bout : UI, code, commentaires, exports CSV/JSON/HTML.
# Cloner
git clone https://github.com/OneNicolas/ADReplic.git
cd ADReplic
# Build
dotnet build
# Tester
dotnet test
# Lancer l'app
dotnet run --project src/ADReplic.App# Produit dist/ADReplic-{version}/ + zip + launchers + 2 modules PowerShell
.\build\publish.ps1Le dossier dist/ADReplic-{version}/ contient :
App/ADReplic.exe(single-file, ~200 Ko)Module/ADReplic/(module PowerShell binaire + script imbriqué)Module/ADForestAudit/(module legacy)Lancer-GUI.cmd(raccourci pour ne pas avoir à ouvrir le sous-dossier App)Lancer-PowerShell.cmd(session PowerShell avec modules pré-chargés)ADReplic.ico(icone multi-résolution pour création de raccourcis manuels)README.txt(notice utilisateur final)
Pour publier une nouvelle version :
# Tout-en-un : bump version, build, tests, pack portable, tag git local
.\Release.ps1 -Version "X.Y.Z"
# Puis pousser
git push
git push --tags
# Et créer la GitHub Release manuellement avec le ZIP en asset
# https://github.com/OneNicolas/ADReplic/releases/new?tag=vX.Y.Z# Importer
Import-Module .\Module\ADReplic\ADReplic.psd1
# Inventaire
Get-ADRDcInventory
Get-ADRReplicationStatus -ForestName exemple.local
# Échecs et anomalies
Get-ADRReplicationFailure -Credential (Get-Credential)
Get-ADRIssue # toutes les anomalies
Get-ADRIssue -Severity Critical # uniquement les critiques
Get-ADRIssue -Code DC_ISOLATED, OS_UNSUPPORTED
# Sondes DNS / Réseau
Get-ADRDnsHealth | Where-Object Status -ne 'Ok'
Get-ADRPortHealth -DCHostName dc01.exemple.local -Port 389,636
# Export complet (sondes activées par défaut)
Export-ADRAudit -Path C:\Temp\audit.html -Format HTML
Export-ADRAudit -Path C:\Temp\audit-fast.html -Format HTML -SkipHealthProbes
# Planification d'audits récurrents (Task Scheduler natif Windows)
Register-ADRScheduledAudit -TaskName "ADReplic-Weekly" `
-OutputFolder "\\fs01\reports\AD" `
-Frequency Weekly -At "07:00" `
-Credential (Get-Credential)Stockées dans %APPDATA%\ADReplic\ :
| Fichier | Contenu |
|---|---|
theme.txt |
Préférence thème (Light / Dark) |
Aucune donnée sensible n'est persistée — les identifiants saisis dans le dialogue sont en mémoire uniquement.
- Forêt AD multi-DC sous Windows Server 2022 (3 DC, 30 liens de réplication inter-sites)
- Postes Windows 10 et Windows 11 (en domaine et hors-domaine avec UPN)
| Version | Date | Apports majeurs |
|---|---|---|
| 0.4.0 | mai 2026 | Sondes DNS et Réseau (4 SRV + A records, 9 ports TCP) avec P/Invoke DnsQuery_W et TcpClient, scoring tripartite renormalisé, 6 nouveaux détecteurs, 2 onglets GUI, 2 cmdlets PowerShell, planification via Register-ADRScheduledAudit, icône .exe multi-résolution générée depuis le XAML |
| 0.3.0 | mai 2026 | Mode DC seul : audit ciblé d'un contrôleur précis (champ "DC cible" + menu contextuel), détecteurs adaptés (DC_ISOLATED et DOMAIN_SINGLE_DC désactivés en mode ciblé pour éviter les faux positifs) |
| 0.2.0 | mai 2026 | Moteur de détection d'anomalies (7 détecteurs), onglet GUI "Diagnostics", cmdlet Get-ADRIssue, section HTML "Diagnostics", fichier issues.csv |
| 0.1.0 | mai 2026 | Socle initial : inventaire, réplication, échecs, topologie, score de santé, 5 onglets GUI, 5 cmdlets, exports CSV/JSON/HTML, thèmes clair/sombre, pack portable |
Détail de chaque version dans les GitHub Releases.
Voir le backlog priorisé interne. Prochaines features prévues :
- Mode DC seul côté PowerShell — paramètre
-DcNamesur les cmdlets concernées - Comparaison de deux audits — mode diff entre 2 fichiers JSON pour suivi MCO
- Vue topologie SVG — visualisation graphique inter-sites
- Auto-refresh / mode monitoring — réactualisation périodique avec notification de dégradation
- Rotation automatique des rapports planifiés — paramètre
-MaxKeptReportssurRegister-ADRScheduledAudit
Voir LICENSE. Logiciel propriétaire à utilisation gratuite — pas de redistribution sans autorisation.
Scopi — La SCOP Informatique — Nicolas Haultcoeur