Erreur « RD Web Access does not appear to be installed » : corriger Publish‑RDWebClientPackage sur Windows Server 2019

Lorsqu’on déploie le client HTML5 de Bureau à distance, l’erreur « RD Web Access does not appear to be installed » peut bloquer la mise en production : ce guide exhaustif détaille chaque cause possible, les vérifications à effectuer et les commandes PowerShell pour rétablir un environnement RDS sain.

Sommaire

Erreur : « RD Web Access does not appear to be installed » lors de Publish‑RDWebClientPackage

Vue d’ensemble du problème

Sur un hôte Windows Server 2019, exécuter :

Publish‑RDWebClientPackage ‑Type Production ‑Latest

affiche la séquence :

WARNING: The requested Remote Desktop web client is already installed.
ERROR  : RD Web Access does not appear to be installed on the system.

Pourtant :

  • Le module RDWebClientManagement est chargé (Get‑Command -Module RDWebClientManagement).
  • Le Gestionnaire de serveur signale que les rôles RDS sont installés.

Pourquoi cette incohérence ?

Publish‑RDWebClientPackage procède à six contrôles préalables :

  1. Présence de la fonctionnalité RDS-Web-Access.
  2. Existence du site IIS Default Web Site\RDWeb.
  3. Associations de certificat valides (HTTPS : TLS 1.0+).
  4. Version minimale du module RDWebClientManagement (≥ 1.0.5).
  5. Application /webclient non verrouillée par un processus IIS.
  6. Appartenance de la machine au déploiement RDS courant.

Si l’un de ces tests échoue, la cmdlet renvoie l’erreur ci‑dessus, même si l’interface graphique RDS semble correcte.

Tableau des causes probables

Cause possibleExplication rapide
Rôle RD Web Access absent ou incompletLe package vérifie la fonctionnalité RDS-Web-Access et le site IIS « RDWeb ».
Mauvais serveur cibleLa cmdlet doit être exécutée sur le serveur qui héberge RD Web Access.
Installation RDS partielle / corrompueLa console RDS peut répertorier un rôle supprimé manuellement ; les binaires IIS ne sont plus présents.
Version obsolète du moduleAvant la version 1.0.5, la détection de RD Web Access est lacunaire.
Bindings IIS incorrectsCertificat périmé, port 443 absent ou application dissociée.

Étapes de résolution détaillées

1. Vérifier / (ré)installer la fonctionnalité RD Web Access

# Contrôle
Get-WindowsFeature RDS-Web-Access

# Installation si nécessaire
Install-WindowsFeature RDS-Web-Access –IncludeManagementTools –Restart

Après redémarrage, ouvrez IIS : le site RDWeb doit apparaître sous Default Web Site. Absence ? La fonctionnalité ne s’est pas correctement inscrite ; réexécutez Install-WindowsFeature et surveillez le journal CBS.log.

2. Exécuter les cmdlets sur le bon serveur

Dans un déploiement à plusieurs hôtes (broker, gateway, web access), la confusion est fréquente. Ouvrez PowerShell en mode administrateur sur le serveur où IIS héberge RDWeb :

Get-Website | Where-Object { $_.Name -like "*RDWeb*" }

Si la commande renvoie un résultat, vous êtes sur le bon hôte ; sinon, basculez vers l’autre nœud.

3. Mettre à jour ou réinstaller le module RDWebClientManagement

Find-Module RDWebClientManagement | Select-Object Version,Repository
Uninstall-Module RDWebClientManagement -AllVersions -Force
Install-Module  RDWebClientManagement -RequiredVersion 1.0.5   # ou la plus récente
Import-Module   RDWebClientManagement

Assurez‑vous que le chargement ne déclenche pas d’erreur ; le module doit figurer dans $env:PSModulePath.

4. Contrôler la cohérence du déploiement RDS

# Liste complète
Get-RDServer | Format-Table Server,Roles

# URL et bindings Web Access
Get-RDWebAccessConfiguration

Un serveur fantôme apparaît ? Supprimez‑le :

Remove-RDServer -Server "SRV-ANCIEN" -Role RDS-Web-Access

Répétez l’opération pour chaque rôle absent physiquement.

5. Reconstruire le site IIS RDWeb

Si les fichiers physiques sont corrompus (extensions .aspx manquantes, pool d’applications inopérant), réinstallez :

# Sauvegarde éventuelle du certificat
Export-PfxCertificate -Cert "Cert:\LocalMachine\My\" -FilePath C:\backup\rdweb.pfx -Password (Read-Host -AsSecureString "Mot de passe")

# Désinstallation + réinstallation
Remove-WindowsFeature RDS-Web-Access
Install-WindowsFeature RDS-Web-Access –IncludeManagementTools

# Réimport du certificat
Import-PfxCertificate -FilePath C:\backup\rdweb.pfx -CertStoreLocation Cert:\LocalMachine\My -Password (Read-Host -AsSecureString "Mot de passe")

Vérifiez ensuite :

Test-NetConnection -ComputerName localhost -Port 443

6. Activer TLS 1.2 avant la publication

Par défaut, Windows Server 2019 active TLS 1.0/1.1/1.2. Toutefois, si TLS 1.2 a été désactivé via des GPO « hardening », la publication peut échouer car les cmdlets contactent les services WU via HTTPS.

# Pour forcer TLS1.2 dans .NET 4+
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12

Ou modifiez la ruche :

# Activation permanente côté OS
New-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server" -Name "Enabled" -Value 1 -PropertyType "DWord" -Force

7. Nettoyer d’anciens packages HTML5

Une publication antérieure incomplète peut bloquer la nouvelle :

Get-RDWebClientPackage | Format-Table PackageType,Version,InstallDate
Uninstall-RDWebClientPackage -Type Production -Version "1.0.34.8"

Puis relancez :

Publish-RDWebClientPackage -Type Production -Latest -Verbose

8. Vérifier les journaux pour diagnostiquer finement

CheminIntérêt
Event Viewer > Applications and Services Logs > Microsoft > Windows > TerminalServices-RemoteConnectionManagerÉchecs de rôle RDS lors de l’initialisation.
IISLogs\W3SVC1Détails HTTP/HTTPS, erreurs 404 sur /RDWeb.
%SystemRoot%\Logs\RDWebClientManagementTrace fine des cmdlets Publish‑RDWebClientPackage.

9. Cas des fermes à équilibrage de charge

Dans un scénario NLB ou avec un équilibreur externe :

  • Installez RD Web Access sur chaque nœud.
  • Publiez le client HTML5 sur un nœud, puis répliquez le répertoire %SystemDrive%\inetpub\wwwroot\RDWeb\webclient sur les autres (robusité).
  • Veillez à ce que le certificat wildcard ou SAN couvre l’adresse VIP, sinon la page blanche « Cannot fetch client configuration » s’affiche.

10. Checklist finale avant re‑mise en production

  • Fonctionnalité RDS-Web-Access : ✔
  • Site IIS RDWeb accessible en HTTPS et renvoyant le contenu par défaut : ✔
  • Module RDWebClientManagement à jour : ✔
  • Serveur exécutant la cmdlet ≡ serveur hébergeant RD Web Access : ✔
  • Aucune version obsolète du client HTML5 installée : ✔
  • TLS 1.2 activé et certificat non expiré : ✔

Bonnes pratiques pour un environnement RD Web Access robuste

Sécurisation HTTPS et HSTS

Activez HSTS et redirigez HTTP → HTTPS dans le gestionnaire IIS pour éviter les requêtes non chiffrées. Pensez à renouveler les certificats (ACME, gestion automatisée) avant la date d’expiration ; le client HTML5 refusera les connexions si le certificat n’est plus valide.

Surveillance et alertes

Configurez un journal unique (Microsoft‑Windows‑TerminalServices‑RemoteConnectionManager/Operational) et des alertes SCOM ou scripts PowerShell (Register-ScheduledJob) envoyant un e‑mail dès qu’une erreur 500 ou 503 apparaît.

Gestion des mises à jour

Le client HTML5 évolue régulièrement ; la cmdlet Publish‑RDWebClientPackage -Latest récupère la version publiée par Microsoft. Pour éviter une panne intempestive :

  • Testez toujours sur une collection de validation avant de pousser en production.
  • Documentez la version précédente pour un éventuel rollback :
Publish-RDWebClientPackage -Type Test -Version "1.0.34.8" -Verbose

Automatisation DevOps

Intégrez vos scripts dans une pipeline (Azure DevOps/YAML ou GitHub Actions). Exemple minimal :

steps:
- powershell: |
    Install-Module RDWebClientManagement -Force
    Publish-RDWebClientPackage -Type Production -Latest -Verbose
  displayName: 'Deploy HTML5 RDWeb client'

Versionnez le fichier RDWebClientSettings.json pour reproduire la configuration (UI brandée, langues désactivées, etc.).

Sauvegarde quotidienne du site RDWeb

$backupDir = "D:\Backup\RDWeb_$(Get-Date -Format 'yyyyMMdd')"
Copy-Item "C:\inetpub\wwwroot\RDWeb" -Destination $backupDir -Recurse -Force

Stockez au moins sept versions ; un simple robocopy /MIR restaure le site en cas de corruption.

Foire aux questions (FAQ)

Le rôle RD Web Access est installé mais le site IIS RDWeb n’existe pas. Pourquoi ?

Bien que rare, l’installation peut échouer si IIS a été désinstallé puis réinstallé sans supprimer le rôle RDS. Dans ce cas, la fonctionnalité RDS-Web-Access est marquée installée mais les scripts post‑install n’ont pas généré le site. Réinstallez la fonctionnalité comme indiqué plus haut.
La cmdlet Publish‑RDWebClientPackage reste bloquée sur « Checking RDWeb ».

Cela se produit souvent si le pool d’applications RDWebAccessAppPool est arrêté ou si un proxy sortant bloque l’appel HTTP à Windows Update. Redémarrez le pool et vérifiez netsh winhttp show proxy.
Puis‑je installer RD Web Access sur un serveur ne faisant pas partie du domaine ?

Non. Le rôle exige l’adhésion au domaine Active Directory pour fonctionner avec le broker et récupérer les collections.

Conclusion

En résumé, l’erreur « RD Web Access does not appear to be installed » est presque toujours liée à un décalage entre la réalité IIS/Windows Feature et l’état enregistré dans la base WMI de RDS. En suivant pas à pas les vérifications de ce guide—installation de la fonctionnalité, intégrité du site IIS, cohérence du déploiement RDS et mise à jour des modules PowerShell—vous éliminerez les causes racines et redonnerez à vos utilisateurs un accès web HTML5 fiable à leurs bureaux et applications distants.

Sommaire