Filtres WMI : Eviter une dégradation de performance au démarrage

Les filtres WMI sont très utilisés afin d'évaluer si un objet stratégie de groupe (GPO) s'applique sur un ordinateur. Les filtres les plus utilisés chez les clients permettent de déterminer entre autres :

  • La version de Windows installée sur l'ordinateur.
  • Le type de PC (Portable/Poste fixe).
  • Le modèle/marque du PC.

 

Cependant, l'utilisation de filtres WMI sur les GPO va impacter les performances au démarrage. En effet, l'ordinateur doit évaluer si le filtre est vrai ou faux. En fonction du contenu de la requête WQL, l'évaluation du filtre prend plus de temps, ce qui retarde le processus d'application des GPOs.

 

Aussi l'utilisation d'un filtre WMI sur une GPO retarde l'application des GPO. En effet, si un filtre doit être évalué, le service Client Stratégie de groupe doit attendre que le service WinMgmt démarre et initialise la couche WMI. Une fois que la couche WMI est initialisée, un processus WMIPrvSe est créé et la requête est évaluée. En fonction des performances de la machine ou de l'état du Repository WMI, le temps d'attente avant l'exécution même de la requête WMI peut être plus ou moins long.

 

Bonnes pratiques

Eviter les requêtes WQL génériques

Pour une raison de simplicité, les exemples de filtres WMI utilisent tous des requêtes génériques de type SELECT * FROM Classe_WMI WHERE Condition.

Cependant, il est quand même plus long de récupérer tous les éléments de la classe WMI qu'un seul élément et ceci dégrade les performances. Pour optimiser votre filtre, il faut sélectionner qu'un seul élément au lieu d'utiliser le caractère générique * .

 

Voici un exemple pour déterminer si un PC est du type PC portable :

Select PCSystemType FROM Win32_ComputerSystem WHERE PCSystemType=2

 

Note: Plusieurs méthodes existent pour évaluer si une machine est un ordinateur portable, par exemple tester la présence du type de RAM So-Dimm.

 

D'autres type de requêtes sont à proscrire :

 

De nouvelles classes WMI ou attributs sont ajoutés à chaque nouvelle version d'un système d'exploitation Windows. Il faut alors vérifier que la requête fonctionne sur chaque système d'exploitation de votre infrastructure.

 

Pour filtrer les différentes versions de Windows Client on peut utiliser les requêtes suivantes :

Produit

Requête

Windows 7 SP1

Select ProductType, Version FROM Win32_OperatingSystem WHERE ProductType = 1 AND Version = '6.1.7601'

Windows 8 et +

Select ProductType, Version FROM Win32_OperatingSystem WHERE ProductType = 1 AND Version >= '6.2.9200'

Windows 8.1 Enterprise

Select ProductType, Version FROM Win32_OperatingSystem WHERE ProductType = 1 AND Version = '6.3.9600' AND OperatingSystemSKU = 4

Utilisation des Group Policy Préférences

Il est également possible de filtrer les Préférences avec le ciblage (Item-level targeting). L'item level Targeting utilise des API natives de Windows et n'utilise pas de WMI (sauf si la condition du ciblage est effectuée avec une requête WQL). Les performances de l'Item level targeting sont meilleures par rapport à un filtre WMI classique.

Si vous utilisez des Préférences, il est recommandé de choisir un ciblage avec l'item Level Targeting au lieu d'utiliser un filtre WMI sur l'objet GPO.

Pour plus d'informations vous pouvez consulter l'article suivant : https://technet.microsoft.com/en-us/library/cc733022.aspx

 

Correctifs pour améliorer les performances des composants WMI

Vous trouverez dans la KB suivante les correctifs de performances pour les composants WMI :

 

Correctifs pour améliorer les performances des Group Policy Preferences

Windows 7 SP1