从 Go 查询 WMI
要从 Go 执行 WMI 查询,利用 DLL 调用是可行的。然而,驾驭基于 COM 的 Windows API 的复杂性可能令人望而生畏。幸运的是,有一些替代解决方案可以提供更直接的方法。
一个推荐的解决方案是利用 StackExchange/wmi 的 GitHub 存储库。该包封装了已接受答案中概述的技术,为 WMI 查询提供了方便的接口。
使用 StackExchange/wmi 包
这里有一个代码片段,演示了如何使用 StackExchange/wmi 包:
package main import ( "context" "fmt" "log" "github.com/StackExchange/wmi" ) func main() { query := wmi.CreateQuery(&wmi.Query{ Namespace: "root\cimv2", Query: "SELECT * FROM Win32_Process", Projection: []string{"Caption", "ProcessId"}, }) processes, err := query.Execute(context.Background()) if err != nil { log.Fatal(err) } fmt.Printf("%-5s%-20v", "PID", "Name") fmt.Println() for _, p := range processes { fmt.Printf("%-5v%-20v\n", p.Properties["ProcessId"].Value.Value().(uint32), p.Properties["Caption"].Value.Value().(string)) } }
此示例将获取有关正在运行的进程的信息,包括它们的进程 ID 和名称。 StackExchange/wmi 包处理 COM 和 WMI 的复杂性,简化了 Go 开发人员的查询过程。
以上是如何从 Go 轻松查询 WMI?的详细内容。更多信息请关注PHP中文网其他相关文章!