//这段网上复制来的 看起来有点像 估计改下可以实现我要的功能 不太看得懂 求助 希望帮改改下
//这个是一段 利用WMI获取当前Windows下进程的演示代码
//【如果可以 可以给个红包意思意思辛苦费嘻嘻!】
package main
import (
"github.com/mattn/go-ole"
"github.com/mattn/go-ole/oleutil"
)
func main() {
// init COM, oh yeah
ole.CoInitialize(0)
defer ole.CoUninitialize()
unknown, _ := oleutil.CreateObject("WbemScripting.SWbemLocator")
defer unknown.Release()
wmi, _ := unknown.QueryInterface(ole.IID_IDispatch)
defer wmi.Release()
// service is a SWbemServices
serviceRaw, _ := oleutil.CallMethod(wmi, "ConnectServer")
service := serviceRaw.ToIDispatch()
defer service.Release()
// result is a SWBemObjectSet
resultRaw, _ := oleutil.CallMethod(service, "ExecQuery", "SELECT * FROM Win32_Process")
result := resultRaw.ToIDispatch()
defer result.Release()
countVar, _ := oleutil.GetProperty(result, "Count")
count := int(countVar.Val)
for i :=0; i < count; i++ {
// item is a SWbemObject, but really a Win32_Process
itemRaw, _ := oleutil.CallMethod(result, "ItemIndex", i)
item := itemRaw.ToIDispatch()
defer item.Release()
asString, _ := oleutil.GetProperty(item, "Name")
println(asString.ToString())
}
}
改这样的例子
这是一段 powershell的代码
$getWMi = gwmi -n root\wmi -cl testData
$serverID = $getWMi.AddSession("test_Init")
$Getsession = gwmi -n root\wmi -q "select * from test where SessionId=$($serverID.SessionId)"
$output = $Getsession.GetValue("data/yu").value
echo "$output"
有疑问加站长微信联系(非本文作者)

有人帮助吗 没人我等会再来问问
多半会这个的人不多
@channel - -# 大牛你会吗 看你经常在线的 帮助了不少人
没玩过,你这是要做什么呀?
@channel 就是从WMI里取一个值而已, VB等原理我知道 只是不想用VB,能用GO解决的 不想用第三方语言
@channel 当然 不知道你知不知道有没有 GOLANG调用C# DLL的案列 。
@hellsam 你这是用 Go 写 Windows 图形界面?
@channel 不是 我没那么有空哦, 桌面程序还是C#效率点 GO我只喜欢用来开发WEB 既然想扔了C#了 不能这块问题卡在这里吧 总要解决吧, 不然这块用C#写 就不爽了,
@channel 其实就是操作一个WMI 大概几行代码就搞定了 就是不懂如何GO去操作
有人吗 没人等会再问问
我建议,先试试用C++或C#是否可行,毕竟go调com存在很多坑
@jthmath C# 可以的 我就是不想用C#实现 所以换GO的。 当然不知道可否GO调用C#的DLL
有高手懂的吗
wmi很有局限性,某些电脑 wmi是不能启动的,不要问我为什么知道,运维的 呵呵。 您可以参考下
@czyt 我知道 我那个WMI肯定是可以启动的, 因为我C#测试都通过的, 我想用GO来写, 所以如果懂的话 希望帮帮忙谢谢
引用的库 已经有一个不能用了
@hellsam 试试这个https://github.com/StackExchange/wmi
@czyt 这个我之前看过了 无法满足