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 サイトの他の関連記事を参照してください。