Lorsqu’une VM Windows Server rejette les connexions RDP avec « Aucun serveur de licences Bureau à distance disponible », la cause est presque toujours une configuration RDS incomplète. Voici une méthode pas à pas, éprouvée sur le terrain, pour rétablir l’octroi de licences sans interrompre la production.
Erreur « Aucun serveur de licences Bureau à distance disponible » lors d’une connexion RDP à une VM
Problématique
Des utilisateurs de domaine tentent d’ouvrir une session distante (RDP) sur une machine virtuelle. Le message d’erreur indique qu’aucun serveur de licences Bureau à distance (RDS) n’est disponible pour délivrer des licences. La question revient souvent : faut‑il agir sur la VM, sur le contrôleur de domaine (DC), ou ailleurs ? Et surtout, comment rétablir rapidement l’octroi de licences ?
Ce que signifie réellement l’erreur
Le rôle Remote Desktop Session Host (RDSH) exige la présence d’un serveur de licences RDS activé et correctement déclaré. Sans cela, l’hôte de session peut fonctionner dans une période de grâce limitée, mais finira par bloquer les connexions non‑administratives et afficher l’erreur ci‑dessus.
- Le serveur de licences n’a pas besoin d’être le DC : n’importe quel membre du domaine peut héberger le rôle Remote Desktop Licensing.
- Où agir ? Vous configurez principalement l’octroi sur le serveur de licences (activation + installation des CAL) et vous déclarez ce serveur sur les hôtes RDSH (comme votre VM).
- Mode de licence : choisissez Par périphérique (2) ou Par utilisateur (4) en fonction des CAL achetées.
Plan d’action express (résumé exécutable)
Étape | Action | Détails essentiels |
---|---|---|
Vérifier le rôle Session Host | Confirmer que Remote Desktop Session Host est installé/actif sur la VM. | Server Manager ou :reg query "HKLM\SOFTWARE\Microsoft\ServerManager\ServicingStorage\ServerComponentCache\RDS-RD-Server" /v InstallState (valeur 1 = rôle actif) |
Disposer d’un serveur de licences | Installer Remote Desktop Licensing puis activer le serveur et installer les CAL. | Effectuez l’activation via l’Assistant (téléphone, web, e‑mail) dans le Gestionnaire de licences Bureau à distance (licmgr.exe ). |
Définir le mode de licence | Choisir Par périphérique (2) ou Par utilisateur (4). | GPO : Configuration ordinateur ► Modèles d’administration ► Services Bureau à distance ► Hôte de session… ► Gestion des licences ou registre : reg add "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\RCM\Licensing Core" /v LicensingMode /t REG_DWORD /d 4 /f |
Spécifier le(s) serveur(s) de licences | Déclarer l’adresse FQDN/IP du serveur de licences sur la VM. | GPO (même nœud) ou registre :reg add "HKLM\SYSTEM\CurrentControlSet\Services\TermService\Parameters\LicenseServers" /v SpecifiedLicenseServers /t REG_MULTI_SZ /d "NomServeurLicences" /f |
Redémarrer les services | Redémarrer TermService (ou la VM) et, si modifié, le serveur de licences. | Restart-Service -Name TermService -Force |
Vérifier la délivrance | Contrôler via RD Licensing Diagnoser et l’Observateur d’événements. | Confirmer que le serveur est détecté et que des licences sont attribuées/conformes. |
Réseau & DNS | Ouvrir/valider les ports et la résolution DNS. | TCP 3389 (RDP), TCP 135 (RPC), ports RPC dynamiques 49152‑65535. En cas d’injoignabilité, utiliser la console série du fournisseur (ex. Azure). |
Procédure détaillée pas à pas
Vérifier si la VM est bien un hôte RDSH (sinon, simplifier)
Si vous n’avez besoin que des 2 sessions d’administration autorisées nativement, n’installez pas le rôle RDSH. Sa présence déclenche l’exigence de licences RDS pour les connexions utilisateur. Le simple retrait du rôle RDSH peut résoudre l’erreur si l’usage recherché est purement administratif.
reg query "HKLM\SOFTWARE\Microsoft\ServerManager\ServicingStorage\ServerComponentCache\RDS-RD-Server" /v InstallState
Valeur 1
: rôle présent. Valeur 0
ou clé absente : rôle absent.
Installer et activer le serveur de licences RDS
- Sur le serveur choisi (DC ou autre membre de domaine), installez la fonctionnalité Remote Desktop Licensing (Server Manager ► Add Roles and Features ou PowerShell ci‑dessous).
- Ouvrez le Gestionnaire de licences Bureau à distance (
licmgr.exe
), activez le serveur via l’assistant, puis installez les CAL Par utilisateur ou Par périphérique selon l’achat. - Vérifiez que le compte ordinateur du serveur de licences est bien autorisé dans Active Directory (appartenance au groupe Terminal Server License Servers) pour publier ses informations et, en mode Par utilisateur, consigner l’usage.
# Installation par PowerShell (sur le serveur de licences)
Install-WindowsFeature RDS-Licensing -IncludeManagementTools
Bonnes pratiques : stockez les preuves d’achat (ID/clé de CAL) et exportez périodiquement l’état de licences afin de pouvoir réactiver rapidement après une panne ou une migration.
Définir le mode de licence sur la VM (ou via GPO pour l’ensemble des hôtes)
Recommandé : passez par une GPO ciblant l’OU de vos serveurs RDSH. C’est reproductible et auditable.
- Configuration ordinateur ► Modèles d’administration ► Services Bureau à distance ► Hôte de session Bureau à distance ► Gestion des licences
- Activer Définir le mode de licences des Services Bureau à distance et choisir Par périphérique (2) ou Par utilisateur (4).
En direct sur la VM (si GPO indisponible) :
reg add "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\RCM\Licensing Core" ^
/v LicensingMode /t REG_DWORD /d 4 /f & rem 4 = Par utilisateur, 2 = Par périphérique
Alternative WMI/PowerShell (souvent plus fiable sur toutes versions) :
# Définir le mode par WMI (2 = PerDevice, 4 = PerUser)
$ts = Get-WmiObject -Namespace "root\cimv2\TerminalServices" -Class "Win32_TerminalServiceSetting"
$null = $ts.SetLicensingType(4)
Spécifier le(s) serveur(s) de licences
Avec une GPO : Utiliser les serveurs de licences des Services Bureau à distance spécifiés et renseignez le ou les noms FQDN.
En direct sur la VM :
reg add "HKLM\SYSTEM\CurrentControlSet\Services\TermService\Parameters\LicenseServers" ^
/v SpecifiedLicenseServers /t REG_MULTI_SZ /d "rdls01.contoso.local" /f
Alternative WMI/PowerShell :
$ts = Get-WmiObject -Namespace "root\cimv2\TerminalServices" -Class "Win32_TerminalServiceSetting"
$null = $ts.SetSpecifiedLicenseServerList("rdls01.contoso.local,rdls02.contoso.local")
En environnement Workgroup (pas d’AD) : la découverte automatique ne fonctionne pas. La spécification explicite du serveur de licences est obligatoire.
Redémarrer le service RDP
Restart-Service -Name TermService -Force
sc queryex termservice
Un redémarrage complet de la VM et du serveur de licences est parfois nécessaire après une modification du mode ou l’installation de CAL.
Contrôler la délivrance de licences
- Sur la VM : Server Manager ► Tools ► Remote Desktop Licensing Diagnoser pour vérifier la découverte du serveur de licences et le mode.
- Sur le serveur de licences : Gestionnaire de licences pour confirmer l’activation et le stock de CAL.
- Journaux d’événements :
- Applications and Services Logs ► Microsoft ► Windows ► TerminalServices-RemoteConnectionManager ► Operational (connexions RDP)
- Applications and Services Logs ► Microsoft ► Windows ► TerminalServices-Licensing (côté serveur de licences)
Réseau, DNS et dépannage d’accès
Composant | Port(s) | Remarques |
---|---|---|
RDP | TCP 3389 | Connexion au bureau à distance elle‑même. |
RPC Endpoint Mapper | TCP 135 | Nécessaire pour contacter le serveur de licences. |
RPC dynamiques | TCP 49152–65535 | Plage par défaut sur Windows Server modernes. Peut être restreinte via le registre et pare‑feu si besoin. |
DNS | UDP/TCP 53 | Résolution FQDN du serveur de licences. |
# Tests rapides
Test-NetConnection rdls01.contoso.local -Port 135
Test-NetConnection rdls01.contoso.local -Port 3389
nslookup rdls01.contoso.local
Scripts prêts à l’emploi (copier‑coller)
Script PowerShell — configurer un hôte RDSH
$LicenseServers = "rdls01.contoso.local"
$Mode = 4 # 4 = Par utilisateur, 2 = Par périphérique
# Définir mode et serveurs via WMI
$ts = Get-WmiObject -Namespace "root\cimv2\TerminalServices" -Class "Win32_TerminalServiceSetting"
$null = $ts.SetLicensingType($Mode)
$null = $ts.SetSpecifiedLicenseServerList($LicenseServers)
# Vérifications
(Get-ItemProperty "HKLM:\SYSTEM\CurrentControlSet\Control\Terminal Server\RCM\Licensing Core").LicensingMode
Restart-Service -Name TermService -Force </code></pre>
<h3>Script en ligne de commande — même objectif</h3>
<pre><code>reg add "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\RCM\Licensing Core" /v LicensingMode /t REG_DWORD /d 4 /f
reg add "HKLM\SYSTEM\CurrentControlSet\Services\TermService\Parameters\LicenseServers" /v SpecifiedLicenseServers /t REG_MULTI_SZ /d "rdls01.contoso.local" /f
net stop TermService /y && net start TermService
</code></pre>
<h2>Scénarios fréquents et correctifs ciblés</h2>
<h3>Période de grâce expirée</h3>
<p>Un hôte RDSH neuf autorise temporairement les connexions sans serveur de licences. À expiration, l’erreur apparaît. <strong>La seule correction conforme</strong> : <em>activer un serveur de licences</em>, <em>installer les CAL</em>, <em>définir le mode</em> et <em>déclarer le serveur</em>. Évitez absolument les « contournements » (ex. suppression de clés de <em>GracePeriod</em>) : c’est non conforme et source d’instabilité.</p>
<h3>Migration ou restauration du serveur de licences</h3>
<ol>
<li>Réinstaller la fonctionnalité <em>Remote Desktop Licensing</em> sur le nouveau serveur.</li>
<li>Réactiver le serveur (même ID d’entreprise) et <strong>réinstaller</strong> les CAL depuis vos preuves d’achat/ID.</li>
<li>Mettre à jour la GPO « serveurs de licences » pour pointer vers le nouveau nom.</li>
<li>Redémarrer <em>TermService</em> sur les hôtes RDSH.</li>
</ol>
<h3>Pas d’Active Directory (workgroup, DMZ, lab)</h3>
<p>La découverte automatique ne s’applique pas. Vous devez <strong>obligatoirement</strong> définir le serveur de licences via GPO locale, registre ou WMI (voir scripts ci‑dessus). Vérifiez aussi le pare‑feu (135 + ports RPC dynamiques).</p>
<h3>Choix du mode : Par utilisateur ou Par périphérique ?</h3>
<ul>
<li><strong>Par utilisateur</strong> : adapté aux environnements où un même utilisateur se connecte depuis plusieurs appareils. Le suivi des attributions est plus « déclaratif » côté serveur de licences.</li>
<li><strong>Par périphérique</strong> : idéal pour des postes partagés (salles, usines, kiosks). Chaque appareil obtient un jeton (CAL) individuel.</li>
</ul>
<p><em>Astuces</em> : vérifiez que le nombre de CAL disponibles couvre vos pics de connexions. En cas de changement de politique d’entreprise, harmonisez <strong>à la fois</strong> l’achat de CAL et la valeur <code>LicensingMode</code>.</p>
<h3>Versions de Windows Server et compatibilité</h3>
<ul>
<li>Un serveur de licences récent peut émettre des CAL pour des hôtes RDSH de versions antérieures.</li>
<li>L’inverse n’est pas garanti : si vous avez acquis des CAL d’une version plus récente, privilégiez un serveur de licences de même génération ou ultérieure.</li>
</ul>
<h3>DNS, SPN et droits AD</h3>
<ul>
<li>Assurez‑vous que le FQDN du serveur de licences se résout dans la zone DNS interne et que l’horloge des machines est synchronisée (Kerberos).</li>
<li>Vérifiez le groupe AD <em>Terminal Server License Servers</em>. En cas de doute, ajoutez le compte ordinateur du serveur de licences et forcez un <code>gpupdate /force</code>.</li>
</ul>
<h3>Cloud et accès hors bande</h3>
<p>Si la VM est injoignable (pare‑feu bloqué ou mauvaise GPO), utilisez la <strong>console série</strong> ou un autre accès hors bande du fournisseur (ex. Azure, VMware, etc.) pour corriger la configuration réseau/registre.</p>
<h2>Cheat‑sheet : commandes utiles</h2>
<table>
<thead>
<tr>
<th>But</th>
<th>Commande</th>
</tr>
</thead>
<tbody>
<tr>
<td>Vérifier présence RDSH</td>
<td><code>reg query "HKLM\SOFTWARE\Microsoft\ServerManager\ServicingStorage\ServerComponentCache\RDS-RD-Server" /v InstallState</code></td>
</tr>
<tr>
<td>Installer le rôle Licence</td>
<td><code>Install-WindowsFeature RDS-Licensing -IncludeManagementTools</code></td>
</tr>
<tr>
<td>Définir mode licence</td>
<td><code>reg add "...Licensing Core" /v LicensingMode /t REG_DWORD /d 2|4 /f</code> ou <code>$ts.SetLicensingType(2|4)</code></td>
</tr>
<tr>
<td>Déclarer les serveurs</td>
<td><code>reg add "...TermService\Parameters\LicenseServers" /v SpecifiedLicenseServers /t REG_MULTI_SZ /d "rdls01"</code> ou <code>$ts.SetSpecifiedLicenseServerList()</code></td>
</tr>
<tr>
<td>Redémarrer RDP</td>
<td><code>Restart-Service TermService -Force</code></td>
</tr>
<tr>
<td>Tester RPC/RDP</td>
<td><code>Test-NetConnection rdls01 -Port 135</code> & <code>Test-NetConnection rdls01 -Port 3389</code></td>
</tr>
<tr>
<td>Forcer GPO</td>
<td><code>gpupdate /force</code></td>
</tr>
</tbody>
</table>
<h2>Bonnes pratiques d’entreprise</h2>
<ul>
<li><strong>Centralisez via GPO</strong> la configuration du mode et des serveurs de licences. Évitez les modifications manuelles multiples, sources d’écarts.</li>
<li><strong>Supervisez</strong> l’état du serveur de licences : service en cours d’exécution, nombre de CAL disponibles, journaux d’erreurs, sauvegardes.</li>
<li><strong>Documentez</strong> les hôtes RDSH, le mode choisi, les OU ciblées par les GPO et les contacts « licensing » (achats).</li>
<li><strong>Plan de continuité</strong> : conservez les ID de CAL et exportez les licences pour une restauration rapide.</li>
<li><strong>Hygiène réseau</strong> : limitez l’exposition du port 3389, imposez NLA, utilisez des passerelles (RD Gateway/VPN) et appliquez des ACL précises pour les ports RPC.</li>
</ul>
<h2>FAQ rapide</h2>
<p><strong>Faut‑il installer le serveur de licences sur le DC ?</strong><br>Non. Ce n’est pas une obligation ; tout serveur membre du domaine convient. L’important est qu’il soit <em>activé</em> et correctement <em>déclaré</em> aux hôtes RDSH.</p>
<p><strong>Changer de mode (Utilisateur ↔ Périphérique) résout‑il l’erreur ?</strong><br>Pas si le serveur de licences est introuvable. Le mode doit correspondre aux CAL achetées, mais le <em>chemin critique</em> est la <em>découverte</em> du serveur.</p>
<p><strong>Combien de CAL me faut‑il ?</strong><br>Au minimum le nombre de connexions simultanées prévues (selon mode). Prévoyez une marge pour les pics d’activité et les nouveaux arrivants.</p>
<p><strong>Puis‑je « réinitialiser » la période de grâce ?</strong><br>Non recommandé et non conforme. Mettez en place un serveur de licences activé avec des CAL valides.</p>
<p><strong>Comment vérifier que des licences sont bien attribuées ?</strong><br>Utilisez <em>RD Licensing Diagnoser</em> côté hôte RDSH, et le <em>Gestionnaire de licences</em> côté serveur de licences. Les journaux d’événements doivent être exempts d’erreurs de découverte/d’octroi.</p>
<h2>Informations complémentaires utiles</h2>
<ul>
<li><strong>Où installer le serveur de licences ?</strong> Il n’est <em>pas obligatoire</em> de l’installer sur le DC ; tout membre du domaine peut héberger le rôle.</li>
<li><strong>Nombre de licences suffisant</strong> : assurez‑vous que le pool de CAL RDS couvre le nombre de connexions simultanées attendues ; sinon, l’erreur réapparaîtra.</li>
<li><strong>Sauvegarde</strong> : conservez les codes produit/ID de CAL et exportez les licences pour une réactivation éclair après crash ou migration.</li>
<li><strong>Automatisation</strong> : privilégiez les stratégies de groupe pour définir mode et serveur(s) de licences sur tous les hôtes.</li>
</ul>
<h2>Diagnostic avancé</h2>
<ul>
<li><strong>Vérifier la configuration effective</strong> :
<pre><code>gpresult /h c:\temp\gp.html
reg query "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\RCM\Licensing Core" /v LicensingMode
reg query "HKLM\SYSTEM\CurrentControlSet\Services\TermService\Parameters\LicenseServers" /v SpecifiedLicenseServers
Journalisation utile : activez le canal Operational des journaux TerminalServices pour capter les erreurs de découverte/licensing.
Épurer un serveur de licences après migration : révoquez/déplacez les CAL de l’ancien serveur via le gestionnaire, puis mettez à jour les GPO et testez.
Conclusion
Pour éliminer « Aucun serveur de licences Bureau à distance disponible » : installez/activez un serveur de licences RDS, installez les CAL, choisissez le mode adapté (Par périphérique ou Par utilisateur), déclarez explicitement ce serveur dans la VM (idéalement via GPO), puis redémarrez et contrôlez la délivrance. Cette séquence remet l’environnement en conformité et rétablit immédiatement les connexions RDP des utilisateurs.