Navigation
Nouveautés
Liens utiles :
Les requêtes WMI utilisent le langage de requêtes WMI (WQL), un sous-ensemble du langage SQL.
WMI (Windows Management Instrumentation) est issu d'une initiative de normalisation d'un groupe appelé DMTF (Distributed Management Task Force) auquel Microsoft appartient. L'objectif étant que tous les systèmes soient gérables via une même interface normalisée. De ce groupe est née la norme CIM (Common Information Model). CIM est un schéma orienté objet pour la gestion des systèmes, des réseaux, des applications, des bases de données et des périphériques.
C'est Windows qui a le plus mis en ouvre WMI dans son système d'exploitation. Il est apparu pour la première fois en 1998 dans le service Pack 4 de Windows NT 4.0.Depuis il est présent dans Windows 2000, ME, XP et .NET Server.
WMI permet d'accéder aux ressources d'un ordinateur sous Windows, les configurer, les gérer et les interroger.
Ce qui sous entend la possibilité de gérer une machine, y faire exécuter un programme, arrêter un service, la rebooter ou l'arrêter, voir les ressources system, vous abonner à un événement et recevoir une alerte, interroger le service WMI d'une application (vous pouvez aussi écrire une application offrant un serveur WMI) etc.
Avec WMI vous accédez à tout ceci sans passer par les API, ainsi les développeurs n'ont pas besoin de connaître plusieurs API pour créer des applications puissantes ou interroger les composants de la machine hôte de leur application. Combien de fois avez-vous vu sur les news group la question : “ Comment connaître le numéro de série d'un disque dur ” ?
De plus l'accès ne se limite pas à la machine où s'exécute le logiciel ou le script. On peut aussi interroger un ordinateur situé sur le réseau ou tous les ordinateurs d'un même groupe de travail. Pratique pour un administrateur réseau pour suivre son parc machine, le surveiller, recevoir des alertes, diagnostiquer, rebooter une machine distante ou même la stopper etc.
Microsoft met à disposition un outil qui facilite la construction des requêtes WMI:
Egalement le PowerShell WMI Explorer :
Requêter depuis PowerShell :
Get-wmiObject win32_product
On Error Resume Next strComputer = "." Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2") Set colItems = objWMIService.ExecQuery("Select * from Win32_LogicalDisk",,48) For Each objItem in colItems Wscript.Echo "Access: " & objItem.Access Wscript.Echo "Availability: " & objItem.Availability Wscript.Echo "BlockSize: " & objItem.BlockSize Wscript.Echo "Caption: " & objItem.Caption Wscript.Echo "Compressed: " & objItem.Compressed Wscript.Echo "ConfigManagerErrorCode: " & objItem.ConfigManagerErrorCode Wscript.Echo "ConfigManagerUserConfig: " & objItem.ConfigManagerUserConfig Wscript.Echo "CreationClassName: " & objItem.CreationClassName Wscript.Echo "Description: " & objItem.Description Wscript.Echo "DeviceID: " & objItem.DeviceID Wscript.Echo "DriveType: " & objItem.DriveType Wscript.Echo "ErrorCleared: " & objItem.ErrorCleared Wscript.Echo "ErrorDescription: " & objItem.ErrorDescription Wscript.Echo "ErrorMethodology: " & objItem.ErrorMethodology Wscript.Echo "FileSystem: " & objItem.FileSystem Wscript.Echo "FreeSpace: " & objItem.FreeSpace Wscript.Echo "InstallDate: " & objItem.InstallDate Wscript.Echo "LastErrorCode: " & objItem.LastErrorCode Wscript.Echo "MaximumComponentLength: " & objItem.MaximumComponentLength Wscript.Echo "MediaType: " & objItem.MediaType Wscript.Echo "Name: " & objItem.Name Wscript.Echo "NumberOfBlocks: " & objItem.NumberOfBlocks Wscript.Echo "PNPDeviceID: " & objItem.PNPDeviceID Wscript.Echo "PowerManagementCapabilities: " & objItem.PowerManagementCapabilities Wscript.Echo "PowerManagementSupported: " & objItem.PowerManagementSupported Wscript.Echo "ProviderName: " & objItem.ProviderName Wscript.Echo "Purpose: " & objItem.Purpose Wscript.Echo "Size: " & objItem.Size Wscript.Echo "Status: " & objItem.Status Wscript.Echo "StatusInfo: " & objItem.StatusInfo Wscript.Echo "SupportsFileBasedCompression: " & objItem.SupportsFileBasedCompression Wscript.Echo "SystemCreationClassName: " & objItem.SystemCreationClassName Wscript.Echo "SystemName: " & objItem.SystemName Wscript.Echo "VolumeName: " & objItem.VolumeName Wscript.Echo "VolumeSerialNumber: " & objItem.VolumeSerialNumber Next
Imports System Imports System.Management Public Class Query_SelectQuery Public Overloads Shared Function _ Main(ByVal args() As String) As Integer Dim selectQuery As SelectQuery selectQuery = New SelectQuery("Win32_LogicalDisk") Dim searcher As ManagementObjectSearcher searcher = New ManagementObjectSearcher(selectQuery) Dim disk As ManagementObject For Each disk In searcher.Get() Console.WriteLine(disk.ToString()) Next Console.ReadLine() Return 0 End Function End Class
Imports System Imports System.Management Public Class Query_Select_FullString Public Overloads Shared Function _ Main(ByVal args() As String) As Integer Dim wqlQuery As WqlObjectQuery wqlQuery = New WqlObjectQuery( _ "SELECT * FROM Win32_LogicalDisk") Dim searcher As ManagementObjectSearcher searcher = New ManagementObjectSearcher(wqlQuery) Dim disk As ManagementObject For Each disk In searcher.Get() Console.WriteLine(disk.ToString()) Next Console.ReadLine() Return 0 End Function End Class