«

»

oct 09

Requête WMI contenant NOT

Question : "J'écris une requête WMI qui contient l'argument 'NOT'. Pourquoi cela ne fonctionne t-il pas ?"
Réponse : Une requête WMI permet de sélectionner des attributs basés sur une certaine valeur. Par exemple, si je souhaite lister les partitions qui sont au format NTFS, j'utiliserai le script suivant :

strComputer = "."
Set WshShell = WScript.CreateObject("WScript.Shell")
Dim WshShell
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colFileSystems = objWMIService.ExecQuery ("SELECT * FROM Win32_LogicalDisk WHERE FileSystem = 'NTFS'")
For Each objFileSystem in colFileSystems
wscript.echo objFileSystem.Caption & " " & objFileSystem.FileSystem
Next

L'équivalent en WMI sera :

SELECT * FROM Win32_LogicalDisk WHERE FileSystem = 'NTFS'

L'exécution du script retournera la liste des partitions NTFS. Si je souhaite, en revanche, lister les partitions qui ne sont pas NTFS, le fait de placer l'argument NOT devant le signe égal ne fonctionne pas.
Pour cela, il est nécessaire de placer l'argument NOT devant l'attribut qui est vérifié comme suit :

SELECT * FROM Win32_LogicalDisk WHERE NOT FileSystem = 'NTFS'

On peut retrouver cette situation en séquence de tâches de déploiement lorsque l'on ne veut pas qu'une tâche soit exécutée pour un modèle spécifique.

En plaçant l'argument au bon endroit :