Maison > développement back-end > Golang > Comment puis-je interroger Windows Management Instrumentation (WMI) à partir de Go à l'aide de COM ?

Comment puis-je interroger Windows Management Instrumentation (WMI) à partir de Go à l'aide de COM ?

Linda Hamilton
Libérer: 2024-12-22 02:31:14
original
955 Les gens l'ont consulté

How Can I Query Windows Management Instrumentation (WMI) from Go Using COM?

Interroger WMI depuis Go à l'aide de COM

Dans le domaine de l'administration Windows, interroger Windows Management Instrumentation (WMI) est une tâche cruciale. Pour ceux qui cherchent un moyen d'accomplir cela depuis Go, la solution suivante propose une approche simple utilisant COM.

Mattn, un contributeur sur GitHub, a créé un wrapper pratique qui simplifie le processus. En utilisant ce wrapper ainsi que la gestion des erreurs nécessaire, voici un exemple de programme :

import (
    "github.com/mattn/go-ole"
    "github.com/mattn/go-ole/oleutil"
)

func main() {
    // Initialize and later uninitialize COM
    ole.CoInitialize(0)
    defer ole.CoUninitialize()

    // Create WbemScripting.SWbemLocator object
    unknown, _ := oleutil.CreateObject("WbemScripting.SWbemLocator")
    defer unknown.Release()

    // Obtain SWbemServices object
    wmi, _ := unknown.QueryInterface(ole.IID_IDispatch)
    defer wmi.Release()
    serviceRaw, _ := oleutil.CallMethod(wmi, "ConnectServer")
    service := serviceRaw.ToIDispatch()
    defer service.Release()

    // Execute WMI query
    resultRaw, _ := oleutil.CallMethod(service, "ExecQuery", "SELECT * FROM Win32_Process")
    result := resultRaw.ToIDispatch()
    defer result.Release()

    // Gather process names
    countVar, _ := oleutil.GetProperty(result, "Count")
    count := int(countVar.Val)
    for i := 0; i < count; i++ {
        itemRaw, _ := oleutil.CallMethod(result, "ItemIndex", i)
        item := itemRaw.ToIDispatch()
        defer item.Release()
        asString, _ := oleutil.GetProperty(item, "Name")
        println(asString.ToString())
    }
}
Copier après la connexion

Dans ce code, l'opération critique est l'appel à ExecQuery, qui récupère les données WMI souhaitées. A titre d'exemple, nous récupérons les noms des processus en cours d'exécution. L'exécution de ce programme devrait produire une liste des processus actifs sur votre système.

Cette solution exploite la puissance de COM, une technologie héritée des premiers jours de la programmation orientée objet en C. Bien qu'elle ne soit peut-être pas la plus Approche moderne, il fournit un moyen stable et fiable d'interagir avec WMI depuis Go.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal