Outils pour utilisateurs

Outils du site


windows:wmi

WQL : Utilisation des requêtes WMI

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.

Fonctionnement

Infrasctructure WMI
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.

Outil pour le srcipting

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

Exemple de script

  • Script VBS qui remonte différentes informations :

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

  • Cet exemple de code utilise la classe SelectQuery pour formuler une requête WQL :

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

  • Cet exemple de code utilise la forme WQL originale pour une requête SELECT :

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

, ,
windows/wmi.txt · Dernière modification: 15/04/2016 à 21:15 (modification externe)

Outils de la page