Heim >Backend-Entwicklung >Golang >Wie kann ich Windows Management Instrumentation (WMI) von Go aus über COM abfragen?

Wie kann ich Windows Management Instrumentation (WMI) von Go aus über COM abfragen?

Linda Hamilton
Linda HamiltonOriginal
2024-12-22 02:31:14898Durchsuche

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

Abfragen von WMI von Go aus mit COM

Im Bereich der Windows-Administration ist das Abfragen von Windows Management Instrumentation (WMI) eine entscheidende Aufgabe. Für diejenigen, die eine Möglichkeit suchen, dies aus Go heraus zu erreichen, bietet die folgende Lösung einen unkomplizierten Ansatz unter Verwendung von COM.

Mattn, ein Mitwirkender auf GitHub, hat einen praktischen Wrapper erstellt, der den Prozess vereinfacht. Hier ist ein Beispielprogramm, das diesen Wrapper zusammen mit der notwendigen Fehlerbehandlung verwendet:

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())
    }
}

In diesem Code ist der kritische Vorgang der Aufruf von ExecQuery, der die gewünschten WMI-Daten abruft. Als Beispiel rufen wir die Namen laufender Prozesse ab. Wenn Sie dieses Programm ausführen, sollte eine Liste der aktiven Prozesse auf Ihrem System erstellt werden.

Diese Lösung nutzt die Leistungsfähigkeit von COM, einer veralteten Technologie aus den Anfängen der objektorientierten Programmierung in C. Auch wenn sie möglicherweise nicht die beste ist Der moderne Ansatz bietet eine stabile und zuverlässige Möglichkeit, von Go aus mit WMI zu interagieren.

Das obige ist der detaillierte Inhalt vonWie kann ich Windows Management Instrumentation (WMI) von Go aus über COM abfragen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn