从 Go 查询 WMI:使用 COM 对象
WMI(Windows Management Instrumentation)提供了用于访问 Windows 上的管理和配置信息的标准化接口系统。在 Go 中,可以使用 COM(组件对象模型)框架查询 WMI。
使用“github.com/StackExchange/wmi”包
推荐方法是利用“github.com/StackExchange/wmi”包,它为 Go 中的 WMI 操作提供了稳定且全面的包装器。此包利用已接受答案中讨论的解决方案,简化了初始化 COM 和执行 WMI 查询的过程。
编写 WMI 查询
要编写 WMI 查询,使用包提供的“ExecQuery”函数。例如:
import "github.com/StackExchange/wmi" func main() { query := wmi.CreateQuery(&wmi.Query{ Namespace: `root\cimv2`, Query: `SELECT * FROM Win32_Process`, })
执行查询
组成查询后,使用“查找”功能执行它:
results, err := query.Find() if err != nil { // Handle error }
检索结果
“Find”函数返回“wmi.Record”对象的切片,每个对象代表 WMI 命名空间中的一个匹配实例。访问记录的属性:
for _, record := range results { name, err := record.Property("Name") if err != nil { // Handle error } fmt.Println(name.Value) }
示例代码
这里是一个完整的示例程序,演示如何查询 WMI 进程名称:
package main import ( "fmt" "github.com/StackExchange/wmi" ) func main() { query := wmi.CreateQuery(&wmi.Query{ Namespace: `root\cimv2`, Query: `SELECT Name FROM Win32_Process`, }) results, err := query.Find() if err != nil { // Handle error } for _, record := range results { name, err := record.Property("Name") if err != nil { // Handle error } fmt.Println(name.Value) } }
以上是如何使用 COM 对象从 Go 查询 Windows Management Instrumentation (WMI)?的详细内容。更多信息请关注PHP中文网其他相关文章!