Dans le cadre d’un diagnostic ou d’un audit de conformité, il peut être nécessaire de vérifier les mises à jour Windows installées sur une machine. Que ce soit en local ou à distance, plusieurs méthodes existent selon le contexte : ligne de commande, PowerShell, ou via la base de données SCCM.
Dans cet article, nous verrons comment :
- Vérifier les mises à jour installées avec PowerShell.
- Identifier les mises à jour manquantes via SQL Server sur SCCM.
Vérifier les mises à jour installées avec PowerShell
Méthode rapide : wmic qfe list
wmic qfe list

Cette commande retourne la liste des correctifs installés (hotfixes), avec des détails comme l’ID, la date d’installation, la source, etc. Elle est intégrée à Windows et ne nécessite aucun module additionnel.
💡 Alternative plus moderne : Get-WmiObject
Get-WmiObject -Class Win32_QuickFixEngineering

Cette commande retourne les mêmes informations sous forme d’objets, ce qui facilite donc l’export, le tri ou le filtrage. Exemple :
Get-WmiObject -Class Win32_QuickFixEngineering | Select-Object HotFixID, Description, InstalledOn
Vous pouvez aussi interroger un poste distant (droits requis) :
Get-WmiObject -ComputerName "NomDuPC" -Class Win32_QuickFixEngineering
🔐 Avant tout, assurez-vous que WinRM est activé sur la machine cible et que vous avez les autorisations nécessaires.
Vérifier les mises à jour manquantes via SQL Server (SCCM)
SCCM conserve un historique détaillé de la conformité des mises à jour par poste. Il est donc possible de lister les correctifs non installés sur une machine spécifique, via une requête SQL.
Exemple de requête SQL
SELECT
CAST(DATEPART(yyyy, UI.DatePosted) AS varchar(255)) + '-' +
RIGHT('0' + CAST(DATEPART(mm, UI.DatePosted) AS VARCHAR(255)), 2) AS 'Month Posted',
UI.bulletinid AS 'Bulletin ID',
UI.articleid AS 'Article ID',
UI.Title,
CASE WHEN CTM.ResourceID IS NOT NULL THEN '*' ELSE '' END AS 'Targeted',
CASE WHEN UCS.Status = 2 THEN '*' ELSE '' END AS 'Is Required',
UI.InfoURL AS 'Information',
UI.DatePosted AS 'Date Posted',
CDL.Deadline
FROM
v_UpdateComplianceStatus UCS
JOIN v_UpdateInfo UI ON UI.CI_ID = UCS.CI_ID
LEFT JOIN v_CITargetedMachines CTM ON CTM.CI_ID = UCS.CI_ID AND CTM.ResourceID = UCS.ResourceID
INNER JOIN v_CICategories_All CCALL ON CCALL.CI_ID = UCS.CI_ID
INNER JOIN v_CategoryInfo CINF ON CCALL.CategoryInstance_UniqueID = CINF.CategoryInstance_UniqueID
AND CINF.CategoryTypeName = 'UpdateClassification'
JOIN v_R_System vrs ON vrs.ResourceID = UCS.ResourceID
OUTER APPLY (
SELECT MIN(a.EnforcementDeadline) AS Deadline
FROM v_CIAssignment a
JOIN v_CIAssignmentToCI atc ON atc.AssignmentID = a.AssignmentID AND atc.CI_ID = UCS.CI_ID
) CDL
WHERE
vrs.Name0 = 'Computer_Name'
ORDER BY
UI.DatePosted, UI.ArticleID
🧩 Remplacez
Computer_Name
par le nom réel de la machine cible.
Cette requête vous retournera alors :
- Le bulletin et l’article Microsoft associés,
- Le statut de ciblage (assigné ou non),
- Le statut de conformité (requis ou non),
- La date de publication de la mise à jour,
- Et éventuellement la deadline de déploiement.

Conclusion
En complément de l’interface graphique de Windows Update, plusieurs méthodes avancées permettent de vérifier précisément l’état des mises à jour d’un poste :
- PowerShell pour une vérification rapide, locale ou distante.
- SQL Server pour une analyse plus poussée via SCCM, y compris les mises à jour manquantes.
Ces approches sont donc particulièrement utiles dans les scénarios de dépannage, de reporting de conformité, ou lors de l’analyse post-mortem d’un incident lié à la sécurité ou à la stabilité du système.