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

Comment interroger Windows Management Instrumentation (WMI) depuis Go à l'aide d'objets COM ?

Linda Hamilton
Linda Hamiltonoriginal
2024-11-29 16:50:11583parcourir

How to Query Windows Management Instrumentation (WMI) from Go using COM Objects?

Interrogation de WMI depuis Go : utilisation d'objets COM

WMI (Windows Management Instrumentation) fournit une interface standardisée pour accéder aux informations de gestion et de configuration sous Windows systèmes. Dans Go, il est possible d'interroger WMI à l'aide du framework COM (Component Object Model).

À l'aide du package "github.com/StackExchange/wmi"

Le recommandé L'approche consiste à utiliser le package "github.com/StackExchange/wmi", qui fournit un wrapper stable et complet pour les opérations WMI dans Go. Ce package exploite la solution discutée dans la réponse acceptée, simplifiant le processus d'initialisation de COM et d'exécution des requêtes WMI.

Composer une requête WMI

Pour composer une requête WMI, utilisez la fonction "ExecQuery" fournie par le package. Par exemple :

import "github.com/StackExchange/wmi"

func main() {
    query := wmi.CreateQuery(&wmi.Query{
        Namespace: `root\cimv2`,
        Query:     `SELECT * FROM Win32_Process`,
    })

Exécuter la requête

Une fois la requête composée, exécutez-la à l'aide de la fonction "Rechercher" :

results, err := query.Find()
if err != nil {
    // Handle error
}

Récupération des résultats

La fonction "Rechercher" renvoie une tranche de Objets "wmi.Record", chacun représentant une instance correspondante de l'espace de noms WMI. Pour accéder aux propriétés d'un enregistrement :

for _, record := range results {
    name, err := record.Property("Name")
    if err != nil {
        // Handle error
    }

    fmt.Println(name.Value)
}

Exemple de code

Voici un exemple de programme complet montrant comment interroger WMI pour les noms de processus :

package main

import (
    "fmt"
    "github.com/StackExchange/wmi"
)

func main() {
    query := wmi.CreateQuery(&wmi.Query{
        Namespace: `root\cimv2`,
        Query:     `SELECT Name FROM Win32_Process`,
    })

    results, err := query.Find()
    if err != nil {
        // Handle error
    }

    for _, record := range results {
        name, err := record.Property("Name")
        if err != nil {
            // Handle error
        }

        fmt.Println(name.Value)
    }
}

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:
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