Je publie les diagnostics en niveau 1 et les exemples de remédiation au minimum en niveau 2. Ils restent pédagogiques, non testés et ne doivent pas être utilisés tels quels. Avant tout essai réel, adaptez-les au contexte, utilisez la simulation quand elle existe et validez le rollback sur un pilote représentatif.
Résumé
Sous HKLM\SOFTWARE\Microsoft\IntuneManagementExtension\Win32Apps, l’IME conserve des états applicatifs et des informations de temporisation. Dans GRS, l’AppId observé est le nom d’une propriété REG_SZ placée sous une sous-clé opaque ; ce n’est pas nécessairement une clé nommée avec l’AppId.
Une propriété GRS peut rester après un succès, exister dans plusieurs contextes ou partager son conteneur avec d’autres applications. Supprimer la sous-clé entière peut donc toucher plusieurs déploiements et détruire la chronologie.
Je n’envisage une nouvelle tentative qu’après avoir prouvé un échec terminal courant, corrigé sa cause, classé tous les candidats GRS et préparé une sauvegarde et un rollback. L’observation reste la méthode normale.
Sous HKLM\SOFTWARE\Microsoft\IntuneManagementExtension\Win32Apps, l’IME conserve des états applicatifs et des informations de temporisation. Dans GRS, l’AppId observé est le nom d’une propriété REG_SZ placée sous une sous-clé opaque ; ce n’est pas nécessairement une clé nommée avec l’AppId.
Contexte, objectif et périmètre
Le besoin de relancer rapidement une application est légitime, mais GRS n’est pas une interface publique de remédiation documentée. Sa structure et sa sémantique peuvent évoluer avec l’IME.
Les recettes copiées d’un cas particulier échouent lorsqu’elles confondent l’état d’une application, le cache de reporting et la temporisation. Elles peuvent également provoquer une nouvelle tentative avant que la détection ou le package soit corrigé.
Je traite « Comprendre le GRS Intune avant toute action » comme une chaîne de preuves et non comme une succession de boutons à cliquer. Une action n’est considérée comme réussie que lorsque le résultat est visible au niveau attendu : configuration du service, état reçu par le poste, traitement local, puis remontée cohérente dans les outils d’administration. Cette séparation évite de confondre une affectation valide avec une exécution terminée.
Je conserve systématiquement les heures en UTC et en heure locale, l’identité de l’appareil, le contexte utilisateur ou système, la version de Windows et la version des composants concernés. Sans ces repères, deux événements semblables peuvent appartenir à des cycles différents. Les exemples de journaux sont anonymisés et les identifiants techniques doivent l’être avant tout partage.
Ma méthode part du symptôme observable, formule plusieurs hypothèses concurrentes, puis cherche la preuve capable d’en éliminer une. Je ne commence pas par vider un cache, supprimer une clé ou réinstaller un agent : ces actions modifient précisément l’état qui permettrait de comprendre l’incident. La collecte initiale reste donc en lecture seule.
Une correction n’est proposée qu’après localisation de la phase en échec. Je distingue toujours le contournement temporaire, la correction causale et la correction structurelle. Le retour arrière est préparé avant la modification, puis le résultat est contrôlé sur un pilote représentatif avant toute généralisation.
- Objectif : expliquer la structure observée sans la présenter comme un contrat
- Objectif : déterminer si l’échec est actuel et réessayable
- Objectif : définir les garde-fous d’un éventuel pilote de remédiation
- Périmètre : applications Win32 prises en charge par l’IME
- Périmètre : états locaux Win32Apps et GRS
- Périmètre : observation et décision de support
Architecture et fonctionnement général
La branche Win32Apps est organisée par contexte utilisateur ou device, puis par application et révision. Les états doivent être reliés à l’AppId et aux journaux du même cycle.
Sous GRS, une sous-clé opaque peut contenir plusieurs propriétés dont les noms correspondent à différents AppId. Plusieurs propriétés portant le même AppId peuvent aussi exister dans différents contextes ou historiques.
Le verdict est donc une classification : absent, historique, succès avec trace, échec actuel probable ou ambigu. Seul un candidat actuel, unique et corrélé peut être étudié pour un pilote ; il n’est jamais automatiquement autorisé à la suppression.
- PolicyAppId, révision, intention et contexte.
- EnforcementExigence, détection, installation et code.
- StateMessages de conformité et d’exécution.
- GRSTemporisation interne à corréler, jamais preuve seule.
Chaque étape doit produire sa propre preuve. Un succès en amont ne garantit pas que les étapes suivantes ont terminé leur traitement.
Prérequis techniques et préparation
Avant toute mise en œuvre, je fige le périmètre de test et je capture l’état initial. Cette photographie comprend les versions, les affectations, les autorités de gestion, les dépendances et les exceptions connues. Elle sert autant à interpréter le résultat qu’à construire le retour arrière.
Je vérifie les prérequis sur un appareil réellement représentatif. Une console qui autorise la création d’un profil ne prouve ni l’éligibilité du poste, ni la disponibilité effective de la fonctionnalité dans le tenant. Les prérequis réseau, licence, identité et système doivent tous être confirmés.
- AppId exact obtenu depuis Intune
- heure de l’échec et contexte connus
- journaux IME complets
- état local de détection contrôlé
- cause corrigée avant retry
- export minimal des propriétés concernées
- validation en laboratoire représentatif
Procédure de mise en œuvre
La procédure suivante est volontairement découpée en points de contrôle. Je ne poursuis pas lorsqu’un résultat attendu manque : continuer masquerait la première divergence et produirait des symptômes secondaires plus difficiles à interpréter.
Les noms de groupes, profils, applications et fichiers sont des exemples. Je les remplace par les conventions de l’organisation, je documente la population ciblée et je conserve une preuve avant/après pour chaque changement.
- 01Prouver l’échec courant
- Emplacement
- AppWorkload.log et AppActionProcessor.log
- Commande / configuration
Corréler AppId, révision, code, heure et résultat de détection.- Résultat attendu
- Un échec terminal actuel est distingué d’un historique.
- Vérification
- Le dernier cycle et l’état Intune racontent la même séquence.
- Impact
- Lecture seule.
- Retour arrière
- Aucun.
- 02Inventorier les candidats GRS
- Emplacement
- HKLM\SOFTWARE\Microsoft\IntuneManagementExtension\Win32Apps\<contexte>\GRS
- Commande / configuration
Rechercher les propriétés dont le nom égale exactement l’AppId, sans supprimer.- Résultat attendu
- Tous les contextes, doublons et conteneurs partagés sont visibles.
- Vérification
- Chaque résultat conserve chemin pseudonymisé, type et horodatage.
- Impact
- Lecture seule.
- Retour arrière
- Aucun.
- 03Corriger la cause
- Emplacement
- Package, détection, exigence ou dépendance
- Commande / configuration
Appliquer la correction sur une nouvelle révision ou affectation pilote.- Résultat attendu
- La condition ayant produit l’échec n’existe plus.
- Vérification
- Test indépendant du retry réussi.
- Impact
- Modification pilote.
- Retour arrière
- Restaurer la révision précédente.
- 04Décider GO ou NO-GO
- Emplacement
- Change technique
- Commande / configuration
Autoriser uniquement un candidat unique, courant, sauvegardé et sans conteneur partagé.- Résultat attendu
- La décision et le rollback sont approuvés avant mutation.
- Vérification
- Un cas ambigu reste NO-GO.
- Impact
- Potentielle modification interne IME.
- Retour arrière
- Restaurer la propriété exportée et revenir à l’affectation connue.
La généralisation n’est autorisée qu’après observation du pilote pendant la durée définie dans le plan de changement.
Ce que la présence GRS ne prouve pas
Une propriété GRS peut être présente alors que l’application est installée et détectée. Elle peut correspondre à une tentative antérieure ou à un autre contexte. Je commence donc par le dernier EnforcementStateMessage et les logs, pas par le registre.
La date contenue dans la valeur doit être interprétée avec prudence et corrélée au fuseau. Une correspondance temporelle renforce une hypothèse ; elle ne remplace pas l’état applicatif.
L’absence de propriété ne signifie pas que l’IME réessaiera immédiatement. Applicabilité, dépendances, supersedence, intention et cycle de check-in restent valables.
Pourquoi la suppression du conteneur est dangereuse
Le nom opaque de la sous-clé n’est pas l’AppId. Cette sous-clé peut contenir des valeurs pour plusieurs applications. La supprimer revient à élargir la cible sans preuve et peut relancer ou altérer d’autres traitements.
Une commande récursive copiée depuis Internet masque le nombre d’objets touchés. Elle supprime aussi l’artefact qui aurait permis de comprendre un doublon de contexte ou une ancienne révision.
Même une suppression ciblée d’une propriété reste une opération non contractuelle. Elle exige sauvegarde, simulation, vérification post-action et une version IME testée. Elle ne doit pas devenir un mécanisme d’exploitation permanent.
Le cas 0x87D1041C
0x87D1041C indique que l’application n’a pas été détectée après une installation annoncée réussie. La priorité est de comparer la règle à l’état réel : fichier, version, MSI product code, vue du registre et contexte.
Supprimer une temporisation sans corriger la détection provoque généralement la même installation puis le même échec. Cela augmente la charge, peut réparer ou désinstaller involontairement le produit et brouille le diagnostic.
Je classe donc ce code DETECTION_REVIEW_REQUIRED. Le retry n’est étudié qu’après une nouvelle règle validée sur les états installés, absents et mis à niveau.
Scripts, commandes et exemples de lecture
Les commandes présentées servent à observer ou illustrer le fonctionnement. Les scripts de diagnostic restent de niveau 1, avec arrêt sur erreur et gestion globale de l’exception. Ils ne modifient pas le poste. Une remédiation serait au minimum de niveau 2, avec mode de simulation, journalisation adaptée au test et comportement de rollback explicitement validé.
Je lis toujours la sortie avec le contexte d’exécution. Une commande lancée dans la session de l’utilisateur ne voit pas nécessairement les mêmes certificats, chemins, variables, applications ou ruches de registre qu’un processus exécuté par l’Intune Management Extension sous SYSTEM.
# Exemple pédagogique non testé — niveau 1
$ErrorActionPreference = 'Stop'
try {
$appId = '<GUID-AppId>'
$root = 'HKLM:\SOFTWARE\Microsoft\IntuneManagementExtension\Win32Apps'
Get-ChildItem -LiteralPath $root -Recurse -ErrorAction Stop |
Where-Object { $_.PSParentPath -match '\\GRS($|\\)' } |
ForEach-Object {
$item = Get-ItemProperty -LiteralPath $_.PSPath
if ($item.PSObject.Properties.Name -contains $appId) {
[pscustomobject]@{ KeyPath = $_.Name; AppId = $appId; Value = $item.$appId }
}
}
}
catch { Write-Error "Inventaire GRS impossible : $($_.Exception.Message)"; exit 1 }Le chemin peut contenir des identifiants utilisateur. Pseudonymiser avant partage. Aucune suppression n’est incluse.
Validation et critères de contrôle
Je valide d’abord le résultat technique sur le poste, puis sa remontée dans le service. Le portail peut conserver un état ancien pendant un certain temps ; inversement, un état vert dans la console ne dispense pas de contrôler l’artefact local réellement attendu.
Le critère GO exige un résultat reproductible, une absence de régression sur les fonctions voisines, une documentation à jour et un retour arrière démontré. Le critère NO-GO s’applique dès qu’une dépendance n’est pas maîtrisée, qu’une partie du parc réagit différemment ou que l’état final ne peut pas être prouvé.
- échec actuel prouvé
- cause corrigée
- tous candidats classifiés
- aucun conteneur partagé ciblé
- sauvegarde vérifiée
- pilote reproductible
- état Intune stable après deux cycles
Journaux, diagnostic et constitution des preuves
Je lis IntuneManagementExtension.log, AppWorkload.log, AppActionProcessor.log et Win32AppInventory.log avant le registre. L’état de détection actuel est indispensable.
Le rapport conserve AppId et révision, mais pseudonymise les contextes. Il indique le nombre de candidats, leur âge relatif, le nombre de propriétés dans le conteneur et le verdict fail-safe.
- AppId et révision exacts
- dernier code d’enforcement
- résultat de détection actuel
- heure de début et fin
- tous les candidats GRS
- conteneur partagé ou non
- sauvegarde avant toute mutation
| Verdict | Observation | Décision |
|---|---|---|
| ABSENT | Aucune propriété au nom exact | Aucune action registre |
| HISTORICAL | Valeur ancienne sans échec courant | Conserver et documenter |
| SUCCESS_PRESENT | Application conforme avec GRS présent | Preuve que présence ≠ échec |
| AMBIGUOUS | Plusieurs contextes ou candidats actuels | NO-GO |
| OBSERVATION_READY | Échec courant, candidat unique, cause corrigée | Préparer seulement un pilote approuvé |
Dépannage : symptômes, preuves et corrections
Je pars de la colonne Symptôme, mais je ne choisis jamais une correction sur ce seul indice. La colonne Preuve indique l’élément qui doit confirmer la cause. Si cette preuve manque, l’hypothèse reste ouverte et l’action proposée ne doit pas être appliquée comme une recette automatique.
Après correction, je reproduis le scénario initial et je compare les mêmes points de mesure. Un changement de symptôme n’est pas toujours une résolution : il peut simplement indiquer que le traitement progresse jusqu’à une nouvelle phase. La chronologie complète reste donc la référence.
| Symptôme | Cause à confirmer | Preuve recherchée | Correction ciblée |
|---|---|---|---|
| App installée mais GRS présent | Trace historique normale | Détection et dernier état succès | Ne rien supprimer |
| Plusieurs valeurs AppId | Contextes/révisions multiples | Chemins et horodatages | Classer ambigu, NO-GO |
| Sous-clé avec plusieurs apps | Conteneur mutualisé | Liste des propriétés | Interdire suppression du conteneur |
| 0x87D1041C | Détection incorrecte | État réel vs règle | Corriger détection avant retry |
| Échec revient après suppression | Cause non corrigée | Même code et même phase | Reprendre diagnostic causal |
Les causes sont des hypothèses jusqu’à leur confirmation par une preuve locale ou une donnée de service corrélée.
Retour arrière et points de vigilance
Le retour arrière ne consiste pas seulement à retirer une affectation. Je restaure l’autorité précédente, la configuration ou la version attendue, puis je vérifie que le poste a effectivement reçu et appliqué ce nouvel état. Les caches et délais de remontée sont documentés au lieu d’être interprétés comme une absence de rollback.
Je conserve les preuves du pilote, le motif de la décision et les écarts rencontrés. Si le service cloud ou une interface évolue, je réévalue les étapes avant une nouvelle vague. Aucun succès obtenu uniquement sur le poste de développement ne constitue une validation de production.
- Rollback : restaurer la propriété exacte depuis la sauvegarde validée
- Rollback : restaurer l’affectation ou révision précédente
- Rollback : arrêter le pilote au premier état inattendu
- Vigilance : GRS n’est pas une API publique
- Vigilance : présence ne signifie pas échec
- Vigilance : ne jamais supprimer une branche GRS complète
- Vigilance : une remédiation réelle exige au minimum le niveau 2
Repères d’utilisation
Cette analyse propose une méthode opérationnelle et un cadre de décision. Avant toute application à grande échelle, vérifiez les versions, les licences et les comportements sur un environnement pilote représentatif de votre contexte.
Références techniques publiques
J’ai privilégié la documentation Microsoft pour les comportements contractuels. Les retours terrain complètent l’observation, sans remplacer la documentation de support.
- MicrosoftIntune Management Extension
- MicrosoftTroubleshooting des applications Win32
- MicrosoftCodes d’erreur d’installation Intune