Joindre des ordinateurs à un domaine Active Directory est une tâche routinière qui devient fastidieuse lorsqu’elle est effectuée manuellement sur des dizaines ou des centaines de machines. Automatiser le processus de jonction au domaine par le scripting permet de gagner un temps considérable et assure la cohérence. Ce guide couvre plusieurs approches, de la commande classique netdom aux cmdlets PowerShell modernes et à la jonction hors ligne au domaine pour les environnements sans connectivité réseau directe.

Prérequis

Avant de scripter les jonctions au domaine, vérifiez ces exigences :

  • Résolution DNS — L’ordinateur doit pouvoir résoudre le nom de domaine. Assurez-vous que les paramètres DNS pointent vers un contrôleur de domaine ou un serveur DNS hébergeant la zone DNS AD.
  • Connectivité réseau — L’ordinateur doit pouvoir atteindre un contrôleur de domaine sur les ports requis (LDAP 389, Kerberos 88, SMB 445, DNS 53, RPC 135 + dynamiques).
  • Identifiants de domaine — Vous avez besoin d’un compte avec la permission de joindre des ordinateurs au domaine. Par défaut, tout utilisateur authentifié du domaine peut joindre jusqu’à 10 ordinateurs (contrôlé par l’attribut ms-DS-MachineAccountQuota).
  • Nom de l’ordinateur — L’ordinateur doit avoir son nom d’hôte prévu défini avant la jonction au domaine.

Méthode 1 : Utiliser netdom (Classique)

L’outil en ligne de commande netdom est disponible depuis les outils de support de Windows 2000 et est inclus dans Windows Server et RSAT.

Jonction de base au domaine

netdom join %COMPUTERNAME% /domain:corp.example.com /userd:CORP\admin /passwordd:P@ssw0rd /reboot:5

Paramètres :

  • %COMPUTERNAME% — L’ordinateur à joindre (utilisez le nom réel ou %COMPUTERNAME% pour la machine locale)
  • /domain — Le FQDN du domaine cible
  • /userd — Identifiants de domaine avec permission de jonction
  • /passwordd — Mot de passe (utilisez * pour être invité de manière sécurisée)
  • /reboot — Secondes d’attente avant le redémarrage automatique

Joindre et placer dans une OU spécifique

netdom join WORKSTATION01 /domain:corp.example.com /userd:CORP\admin /passwordd:* /ou:"OU=Workstations,OU=IT,DC=corp,DC=example,DC=com" /reboot:5

Script batch pour plusieurs ordinateurs

Créez un fichier texte (computers.txt) avec un nom d’ordinateur par ligne, puis :

@echo off
for /f %%i in (computers.txt) do (
    echo Joining %%i to domain...
    netdom join %%i /domain:corp.example.com /userd:CORP\admin /passwordd:* /reboot:30
)
echo Done.
pause

Méthode 2 : PowerShell Add-Computer (Recommandé)

Le cmdlet Add-Computer est la méthode moderne et préférée pour la jonction au domaine.

Joindre l’ordinateur local

# Join the local computer to the domain and restart
Add-Computer -DomainName "corp.example.com" -Credential (Get-Credential) -Restart

Joindre et placer dans une OU spécifique

Add-Computer -DomainName "corp.example.com" `
    -OUPath "OU=Workstations,OU=IT,DC=corp,DC=example,DC=com" `
    -Credential (Get-Credential) `
    -Restart

Joindre un ordinateur distant

# Join a single remote computer
Add-Computer -ComputerName "WORKSTATION01" `
    -DomainName "corp.example.com" `
    -Credential (Get-Credential) `
    -Restart

# Join multiple remote computers
$computers = @("WS01", "WS02", "WS03", "WS04", "WS05")

Add-Computer -ComputerName $computers `
    -DomainName "corp.example.com" `
    -OUPath "OU=Workstations,DC=corp,DC=example,DC=com" `
    -Credential (Get-Credential) `
    -Restart -Force

Renommer et joindre en une seule étape

Add-Computer -DomainName "corp.example.com" `
    -NewName "WS-FINANCE-01" `
    -Credential (Get-Credential) `
    -Restart

Jonction en masse au domaine depuis un CSV

Pour les déploiements à grande échelle, utilisez un fichier CSV avec les détails des ordinateurs :

ComputerName,OU
WS01,OU=Sales,DC=corp,DC=example,DC=com
WS02,OU=Engineering,DC=corp,DC=example,DC=com
WS03,OU=HR,DC=corp,DC=example,DC=com
$cred = Get-Credential -Message "Enter domain admin credentials"
$computers = Import-Csv -Path "C:\domain-join-list.csv"

foreach ($computer in $computers) {
    try {
        Add-Computer -ComputerName $computer.ComputerName `
            -DomainName "corp.example.com" `
            -OUPath $computer.OU `
            -Credential $cred `
            -Restart -Force `
            -ErrorAction Stop

        Write-Host "Successfully joined $($computer.ComputerName)" -ForegroundColor Green
    }
    catch {
        Write-Host "Failed to join $($computer.ComputerName): $_" -ForegroundColor Red
    }
}

Méthode 3 : Jonction hors ligne au domaine (djoin.exe)

La jonction hors ligne au domaine permet de joindre un ordinateur au domaine sans connectivité réseau directe avec un contrôleur de domaine au moment de la jonction. C’est utile pour :

  • Le provisionnement de machines dans une usine ou une zone de préparation sans accès au réseau du domaine
  • Le déploiement de VMs à partir de modèles
  • La jonction d’ordinateurs via des liens WAN avec une connectivité peu fiable

Étape 1 : Provisionner le compte d’ordinateur

Exécutez ceci sur tout ordinateur joint au domaine avec les permissions appropriées :

djoin /provision /domain corp.example.com /machine NEWPC01 /savefile C:\odjblob.txt

Options :

  • /provision — Créer le compte d’ordinateur dans AD
  • /domain — Nom du domaine cible
  • /machine — Nom de l’ordinateur à joindre
  • /savefile — Chemin pour sauvegarder le blob de provisionnement
  • /machineou — (Optionnel) Chemin de l’OU pour le compte d’ordinateur

Avec placement dans une OU :

djoin /provision /domain corp.example.com /machine NEWPC01 /machineou "OU=Workstations,DC=corp,DC=example,DC=com" /savefile C:\odjblob.txt

Étape 2 : Appliquer le blob sur l’ordinateur cible

Transférez le fichier blob vers l’ordinateur cible (via clé USB, partage réseau, etc.) et exécutez :

djoin /requestODJ /loadfile C:\odjblob.txt /windowspath %SystemRoot% /localos

Étape 3 : Redémarrer

Redémarrez l’ordinateur. Lorsqu’il démarre, il sera joint au domaine et pourra s’authentifier avec son compte machine dès qu’il aura une connectivité réseau avec un DC.

Automatiser la jonction hors ligne au domaine dans le déploiement

Vous pouvez intégrer djoin dans une séquence de tâches de déploiement du SE (MDT, SCCM/MECM) :

# Generate blob during imaging task sequence
$computerName = $env:COMPUTERNAME
djoin /provision /domain corp.example.com /machine $computerName /reuse /savefile "C:\Windows\odjblob.txt"

# Apply during OOBE or first-boot script
djoin /requestODJ /loadfile "C:\Windows\odjblob.txt" /windowspath %SystemRoot% /localos

Pré-création de comptes d’ordinateur

Pour une meilleure organisation et sécurité, pré-créez les comptes d’ordinateur dans Active Directory avant la jonction au domaine :

Avec PowerShell

# Pre-stage a single computer account
New-ADComputer -Name "WS01" `
    -Path "OU=Workstations,DC=corp,DC=example,DC=com" `
    -Enabled $true

# Pre-stage from a list
$computers = @("WS01", "WS02", "WS03", "WS04", "WS05")

foreach ($pc in $computers) {
    New-ADComputer -Name $pc `
        -Path "OU=Workstations,DC=corp,DC=example,DC=com" `
        -Enabled $true
    Write-Host "Pre-staged $pc"
}

Dépannage des échecs de jonction au domaine

Erreurs courantes et solutions

“The specified domain either does not exist or could not be contacted”

  • Vérifiez les paramètres DNS : nslookup corp.example.com
  • Assurez-vous que le serveur DNS préféré est un contrôleur de domaine ou redirige vers un
  • Testez la connectivité : Test-NetConnection -ComputerName corp.example.com -Port 389

“An attempt to resolve the DNS name of a DC in the domain being joined has failed”

  • Vérifiez que les enregistrements SRV DNS existent : nslookup -type=srv _ldap._tcp.dc._msdcs.corp.example.com
  • Vérifiez le suffixe DNS principal de l’ordinateur

“Access is denied” ou “The user does not have permission”

  • Vérifiez que le compte a les permissions de jonction au domaine
  • Vérifiez l’attribut ms-DS-MachineAccountQuota (par défaut : 10)
  • Vérifiez si le compte d’ordinateur a été pré-créé et si l’utilisateur effectuant la jonction a les permissions d’écriture dessus

“The machine account already exists”

  • Le nom de l’ordinateur est déjà utilisé dans AD. Supprimez le compte obsolète ou utilisez un nom différent :
    # Reset the existing computer account
    Reset-ComputerMachinePassword -Server "dc01.corp.example.com" -Credential (Get-Credential)

Vérification après la jonction au domaine

# Verify domain membership
(Get-WmiObject Win32_ComputerSystem).Domain

# Test secure channel to DC
Test-ComputerSecureChannel -Verbose

# Verify the computer account in AD
Get-ADComputer -Identity $env:COMPUTERNAME

Résumé

Automatiser la jonction au domaine par le scripting élimine le processus manuel et répétitif de joindre chaque ordinateur individuellement. Utilisez Add-Computer dans PowerShell pour les environnements modernes — il gère les jonctions locales et distantes, le placement dans les OU et le renommage en un seul cmdlet. Pour les scénarios sans connectivité réseau, djoin.exe fournit la capacité de jonction hors ligne au domaine. Pour les environnements hérités, netdom reste une option fiable. Vérifiez toujours la résolution DNS et la connectivité au domaine avant de tenter les jonctions, et pré-créez les comptes d’ordinateur dans les bonnes OU pour la cohérence organisationnelle.