Échec WMI : corriger l’erreur « Unable to Update Resource Access Policy » sur Remote Desktop Gateway

Vous tentez de modifier une Resource Authorization Policy (RAP) sur un serveur Remote Desktop Gateway exécutant Windows Server 2022 Datacenter et la console s’effondre avec le message : « WMI failure: Unable to Update Resource Access Policy ». Découvrez comment diagnostiquer, corriger et prévenir durablement ce dysfonctionnement.

Sommaire

Vue d’ensemble du problème

Dans une installation Quick Start de Remote Desktop Services, le rôle RD Gateway s’appuie sur Windows Management Instrumentation (WMI) pour compiler et écrire des scripts au moment où l’administrateur enregistre une RAP. Lorsque WMI échoue à cette étape, la console Gestion du Gestionnaire RD Gateway se ferme brutalement ou signale l’erreur sans permettre la sauvegarde. Le plus souvent, deux causes racines expliquent ce scénario : le déplacement des variables d’environnement TEMP/TMP vers un emplacement inadapté ; la présence de noms d’hôtes obsolètes dans la stratégie.

Tableau récapitulatif des causes et correctifs rapides

Cause identifiéeCorrectifRemarques utiles
Variables TEMP/TMP déplacéesRétablir TEMP et TMP sur C:\Windows\Temp puis redémarrer le rôle RD Gateway (ou le serveur).Le fournisseur WMI du rôle écrit et exécute des scripts temporaires dans ce dossier ; un chemin situé sur un volume non‑NTFS, réseau ou sans droits NT FS adéquats déclenche l’échec de la compilation MOF.
Ordinateurs obsolètes dans la RAPSupprimer tout nom d’hôte inexistant dans l’AD ou le DNS, enregistrer de nouveau la stratégie.À chaque validation, RD Gateway résout et vérifie tous les objets ; un hôte introuvable génère la même chaîne d’erreur WMI.

Contexte technique du rôle RD Gateway et de WMI

RD Gateway expose une interface HTTPS qui encapsule le trafic RDP. Lorsqu’un client se connecte, le service TsgGateway applique successivement les politiques CAP (Connection Authorization Policy) et RAP. Les RAP s’appuient sur des classes WMI stockées dans le namespace root\cimv2\TerminalServices. À chaque modification, la console écrit un script MOF, le compile via mofcomp.exe et met à jour le référentiel. Cette chaîne dépend :

  • du compte service NETWORK SERVICE (droits NTFS et accès DCOM) ;
  • de l’intégrité du référentiel WMI (%SystemRoot%\System32\wbem\Repository) ;
  • de l’emplacement TEMP/TMP qui doit être local, NTFS, accessible en lecture/écriture.

Symptômes et journaux à surveiller

  • Fenêtre « Remote Desktop Gateway Manager » qui disparaît ou message « Unable to Update Resource Access Policy » lors de l’enregistrement.
  • Événements ID 10 ou ID 5858 dans WMI-Activity signalant une erreur d’exécution de script.
  • Entrées ID 101, 302 ou 304 dans TerminalServices‑Gateway indiquant une opération de configuration avortée.
  • L’invite mofcomp.exe retourne un code 3 (Directory not found) si TEMP n’est pas valide.

Dépannage pas à pas

Vérifier les services WMI

Ouvrez une invite PowerShell élevée et exécutez :

Get-Service Winmgmt, RpcSs, Tsgateway | Format-Table -Auto

Tous doivent être à l’état Running. Redémarrez Winmgmt si nécessaire :

Restart-Service -Name Winmgmt -Force

Contrôler les variables d’environnement

Depuis la même session PowerShell :

[Environment]::GetEnvironmentVariable('TEMP','Machine')
[Environment]::GetEnvironmentVariable('TMP','Machine')

Si la sortie n’est pas C:\Windows\Temp, rétablissez‑la :

[Environment]::SetEnvironmentVariable('TEMP','C:\Windows\Temp','Machine')
[Environment]::SetEnvironmentVariable('TMP','C:\Windows\Temp','Machine')

Pensez à vérifier également les variables au niveau User pour le compte NETWORK SERVICE via l’outil setx ou en éditant directement le registre HKU\S-1-5-20\Environment. Après modification, redémarrez le serveur ou, à défaut, redémarrez les services Tsgateway et Winmgmt.

Nettoyer les entrées fantômes dans la RAP

Dans la console RD Gateway Manager :

  1. Ouvrez la RAP incriminée.
  2. Allez dans l’onglet Network Resources.
  3. Supprimez ou remplacez tout hôte ne répondant plus au ping DNS/AD.
  4. Enregistrez la stratégie ; l’erreur devrait disparaître.

Vous pouvez automatiser la détection d’entrées orphelines avec PowerShell :

Get-WmiObject -Namespace 'root\cimv2\TerminalServices' -Class Win32_TSGatewayResource
| Where-Object { -not (Test-Connection $_.Name -Count 1 -Quiet) }
| Select-Object Name

Diagnostiquer WMI de manière approfondie

  1. Exécutez l’outil Microsoft WMIDiag.vbs. Le rapport (WMI_Diag.log) liste les problèmes de sécurité, d’espace disque ou de structure du référentiel.
  2. Exécutez winmgmt /verifyrepository. Si l’outil retourne Inconsistent, procédez à winmgmt /salvagerepository.
  3. Si la compilation MOF échoue, supprimez les fichiers *.mof restés bloqués dans %SystemRoot%\Temp puis relancez mofcomp %windir%\system32\TerminalServices\tsgateway.mof.

Important : ne recréez le référentiel WMI (/resetrepository) qu’en dernier recours ; cela réinitialise les providers Hyper‑V, WSUS et peut perturber d’autres rôles.

Redémarrage contrôlé du rôle RD Gateway

Pour éviter une coupure utilisateur prolongée :

  1. Empêchez d’abord de nouvelles connexions :
    tsg-policyconfig set /enabled:false
  2. Fermez les sessions existantes (quser /server:<Gateway> puis logoff).
  3. Redémarrez :
    Restart-Service tsgateway, winmgmt
  4. Réactivez le rôle :
    tsg-policyconfig set /enabled:true

Bonnes pratiques pour prévenir l’erreur

  • Conserver TEMP/TMP sur un volume système NTFS offrant les droits Full Control à SYSTEM et NETWORK SERVICE.
  • Surveiller les mises à jour mensuelles corrigeant WMI et RD Gateway ; plusieurs cumulative updates ont résolu des fuites de handle et des échecs de compilation MOF.
  • Mettre en place une tâche planifiée PowerShell qui purge les noms d’hôtes obsolètes dans toutes les RAP.
  • Activer la collecte Diagnostic Data Viewer et exporter régulièrement les journaux HTTPERR pour détecter les erreurs 500 liées à la couche IIS de RD Gateway.
  • Auditer périodiquement le namespace root\cimv2\TerminalServices pour s’assurer que les classes Win32_TSGateway* n’ont pas perdu leurs ACL.

Tableau de correspondance des événements WMI utiles

ID d’événementSourceInterprétation rapide
10WMI-ActivityErreur de script ou accès refusé dans un provider.
5858WMI-ActivityProcessus WMI a échoué ; regarder Status et ClientProcessId.
101TerminalServices-GatewayIncapacité à charger les paramètres de stratégie.
302/304TerminalServices-GatewayÉchec de création ou mise à jour d’objet WMI.

FAQ

Q : Peut‑on déplacer TEMP/TMP sur un volume D pour gagner de l’espace ?
R : Oui, mais uniquement si le volume est local, NTFS et que les services système disposent des mêmes ACL que sur C:\Windows\Temp. Conserver l’emplacement par défaut reste plus simple.

Q : L’erreur est‑elle liée à un antivirus ?
R : Certains moteurs verrouillent les scripts MOF lors de l’analyse en temps réel. Ajoutez %SystemRoot%\Temp et %SystemRoot%\System32\wbem aux exclusions.

Q : WMIDiag signale des « orphaned namespace » ; dois‑je les supprimer ?
R : Un namespace orphelin n’est pas bloquant tant qu’il n’entre pas en conflit. Supprimez‑le uniquement s’il est connu et documenté.

Scripts PowerShell prêts à l’emploi

Exporter toutes les variables d’environnement pertinentes

Get-ChildItem Env: | Where-Object { $_.Name -in 'TEMP','TMP','Path' } | 
    Sort-Object Name | Format-Table Name,Value -Auto

Vérifier que toutes les classes WMI Terminal Services sont saines

$bad = Get-WmiObject -Namespace 'root\cimv2\TerminalServices' -List |
    ForEach-Object {
        try { [void]($_.Name); $null }
        catch { $_.Name }
    }
if ($bad) { $bad | Out-File .\BadTSClasses.txt } else { 'Aucune anomalie détectée.' }

Purger automatiquement les hôtes inactifs des RAP

$raps = Get-WmiObject -Namespace 'root\cimv2\TerminalServices' -Class Win32_TSGatewayAuthorizationRule
foreach ($rap in $raps) {
    $dirty = $false
    foreach ($res in $rap.NetworkResourceNames) {
        if (-not (Test-Connection $res -Count 1 -Quiet)) {
            $rap.NetworkResourceNames = $rap.NetworkResourceNames | Where-Object { $_ -ne $res }
            $dirty = $true
        }
    }
    if ($dirty) { $rap.Put() }
}

Conclusion

Dans la majorité des cas, la restauration des variables TEMP/TMP puis le nettoyage des entrées obsolètes suffisent à éliminer l’erreur « WMI failure: Unable to Update Resource Access Policy ». En combinant diagnostics WMI, bonnes pratiques de sécurité NTFS et maintenance régulière des stratégies, vous garantissez la pérennité de votre infrastructure RD Gateway et réduisez considérablement les interruptions de service.

Sommaire