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