ホームページ >バックエンド開発 >Golang >COM を使用して Go から Windows Management Instrumentation (WMI) をクエリするにはどうすればよいですか?

COM を使用して Go から Windows Management Instrumentation (WMI) をクエリするにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-12-22 02:31:14895ブラウズ

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

COM を使用して Go から WMI をクエリする

Windows 管理の領域では、Windows Management Instrumentation (WMI) のクエリは重要なタスクです。 Go 内からこれを実現する方法を探している人のために、次のソリューションは COM を利用した直接的なアプローチを提供します。GitHub の寄稿者である

Mattn は、プロセスを簡素化する便利なラッパーを作成しました。このラッパーと必要なエラー処理を使用したサンプル プログラムを次に示します。

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

このコードでは、重要な操作は、必要な WMI データを取得する ExecQuery の呼び出しです。例として、実行中のプロセスの名前を取得します。このプログラムを実行すると、システム上のアクティブなプロセスのリストが生成されます。

このソリューションは、C によるオブジェクト指向プログラミングの初期の時代からのレガシー テクノロジである COM の力を活用しています。ただし、これが最も優れているわけではありません。最新のアプローチにより、Go から WMI と対話する安定した信頼性の高い方法が提供されます。

以上がCOM を使用して Go から Windows Management Instrumentation (WMI) をクエリするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。