Filtre WMI pour l’OS dans les GPO
Sommaire
I. Présentation
Lorsque des stratégies de groupes doivent être déployées dans un domaine, il y a souvent plusieurs versions de GPO correspondantes chacune à un système d'exploitation bien ciblé. Il est possible alors de faire une OU pour chaque OS et ensuite d'appliquer sur chacune de ces unités d'organisation la GPO adaptées. Cependant, il y a une solution plus intéressante où vous pouvez garder tout vos objets dans une seule et unique unité d'organisation, et ensuite, grâce au filtre WMI on déterminera pour chaque GPO sur quel(s) OS elle doit s'appliquer. Dans le cas où l'OS ne correspond pas au filtre WMI, la GPO est refusée sur le poste client et ne s'applique donc pas.
II. Versions et ProductType de Windows
Pour créer notre filtre, nous avons besoin de connaître le numéro de Version de Windows et non son nom grand public. Par exemple, pour Windows 8 on trouvera une version 6.2.x, 6.2.9200 bien souvent. La valeur a retenir est surtout "6.2" puisqu'il s'agit de la version principale propre à Windows 8 et Windows Server 2012 (d'où l'intérêt du ProductType pour les différencier). Une des manières de récupérer la version est d'exécuter une invite de commande :
En plus de la version, il faut connaître le type de produit "ProductType". Là c'est plus simple puisque pour les OS clients (Exemple : Windows 8) la valeur est de "1" tandis que pour les OS serveurs (Exemple : Windows Server 2012) la valeur peut être de "2" ou de "3".
Note : La valeur "2" affecte les serveurs contrôleurs de domaine alors que la valeur "3" affecte ceux qui ne le sont pas.
Je vais être gentil avec vous, je vais vous donner les différentes valeurs des versions des systèmes d'exploitations Windows.
- Pour les versions clientes :
- Windows XP : 5.1
- Windows XP 64 bits : 5.2
- Windows Vista : 6.0
- Windows 7 : 6.1
- Windows 8 : 6.2
- Windows 8.1 : 6.3
- Pour les versions serveurs :
- Windows Server 2003 R2 : 5.2
- Windows Server 2008 : 6.0
- Windows Server 2008 R2 : 6.1
- Windows Server 2012 : 6.2
- Windows Server 2012 R2 : 6.3
Ces valeurs vous seront utiles pour faire votre requête WMI.
III. Mise en place du filtre WMI
Passons à la pratique avec la mise en place du filtre WMI sur notre contrôleur de domaine. Accédez à la console de gestion des stratégies de groupe, développez l'arborescence sur la gauche puis cliquez sur "Filtres WMI". Dans la partie de droite, faites un clic droit puis "Nouveau...".
Indiquez un nom à ce filtre (champ "Nom") et éventuellement une description (champ "Description"), au niveau de la requête cliquez sur "Ajouter". Au niveau de l'Espace de noms, laissez "root\CIMv2" qui contient la majorité des classes dont celle que nous avons besoin.
Pour appliquer la GPO uniquement à Windows 8, la requête sera la suivante : SELECT * from Win32_OperatingSystem WHERE Version LIKE "6.2%" and ProductType="1"
Note : Le % est utile puisque la version est généralement 6.2.xxx, comme ça le % permet de remplacer la suite par n'importe quelle chaîne de caractères.
Selon l'OS pour lequel vous souhaitez configurer le filtre, remplacez "6.2" et "1" par les valeurs adaptées selon ce que nous avons vu précédemment.
Une fois votre requête rédigée, validez en cliquant sur "OK" et cliquez sur "Enregistrer".
Enfin, pour appliquer le filtre WMI à une stratégie de groupe, sélectionnez-la dans l'arborescence puis dans la partie de droite, en bas, sélectionnez votre filtre et cliquez sur "Ouvrir". Validez avec "Oui".
Penser à faire une actualisation des mises à jour sur vos postes clients, vous pouvez également faire un "gpresult" pour voir le résultat de l'application des stratégies de groupe, et, si tout va bien la GPO concernée sera refusée sur tous les OS différents de celui indiqué dans le filtre.
IV. Complexifier le filtre WMI
Voici quelques possibilités pour complexifier votre filtre si besoin :
- Cibler les OS - 64 Bits : Ajouter à la fin de la requête : AND OSArchitecture = "64-bit"
- Cibler les OS - 32 Bits : Ajouter à la fin de la requête : AND NOT OSArchitecture = "64-bit"
- Cibler deux OS différents (Exemple Windows 8 et Windows 8.1) : select * from Win32_OperatingSystem where (Version like "6.2%" or Version like "6.3%") and ProductType = "1"
Salut Florian,
Super ton site !
Continue comme ça. En tout cas ça m’aide pas mail dans mon taf.
Encore merci.
Bonjour,
Ce site est très agréable, sobre et bien pensé. A propos de cet article, j’ajouterais le fait qu’il ne faut pas abuser, voir même éviter les caractères génériques (*, ?, ou %) et les opérateurs comme LIKE qui pénalisent les performances. Autrement dit, il faut préférer une requête explicite (certes plus longue à écrire) mais plus rapide lors de son évaluation. J’ajouterais qu’il ne faut pas hésiter à utiliser Powershell pour tester facilement la validité de la requête WMI et en profiter pour évaluer son temps d’exécution. Par exemple, cette requête est approximativement 1/3 plus rapide.
measure-Command {Get-WmiObject -query « SELECT version,ProductType from Win32_OperatingSystem WHERE Version = ‘6.2.9200’ and ProductType=’1′ »}
Bien sûr tout ceci est très relatif, et dépend également des classes WMI qui sont sollicitées.(ie Évitez Win32_Product)
Bonne continuation.
Bonjour,
Merci pour ce complément d’information très intéressant !
Bonne journée.
Florian
Merci bcp; impécable , vraiment.
Bonjour Florian
ton article est très bien, merci beaucoup,
tu quelqu’un aura l’occasion de lire ce commentaire merci de me repondre si vous aurez une ideé sur mon souci,
je voulais utiliser le filtre wmi avec une GPO (sous Windows 2008 et 2012R2) en identifiant l’architecture de l’ordinateur client, mais malheureusement le filtre ne fonctionne pas, quand je verifie avec Gpresult /r, la gpo ne s’applique pas car le filtre est refusé!! par contre quand j’enlève le filtre par OSArchitecture et j’utilise un autre (par exemple, Version LIKE….) ca marche très bien.
voici mes syntaxe:
pour Windows 7 64bit:
SELECT * from Win32_OperatingSystem WHERE Version LIKE « 6.1% » and ProductType= »1″ AND OSArchitecture = « 64-bit »
et pour Windows 7 32bit
SELECT * from Win32_OperatingSystem WHERE Version LIKE « 6.1% » and ProductType= »1″ AND NOT OSArchitecture = « 64-bit »