求助一段 操作WMI代码

hellsam · 2018-01-09 22:09:09 · 2257 次点击 · 大约8小时之前 开始浏览    置顶
这是一个创建于 2018-01-09 22:09:09 的主题,其中的信息可能已经有所发展或是发生改变。

//这段网上复制来的 看起来有点像 估计改下可以实现我要的功能 不太看得懂 求助 希望帮改改下
//这个是一段 利用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"

有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

2257 次点击  
加入收藏 微博
18 回复  |  直到 2018-01-16 15:20:21
hellsam
hellsam · #1 · 7年之前

有人帮助吗 没人我等会再来问问

channel
channel · #2 · 7年之前

多半会这个的人不多

hellsam
hellsam · #3 · 7年之前

@channel - -# 大牛你会吗 看你经常在线的 帮助了不少人

channel
channel · #4 · 7年之前

没玩过,你这是要做什么呀?

hellsam
hellsam · #5 · 7年之前

@channel 就是从WMI里取一个值而已, VB等原理我知道 只是不想用VB,能用GO解决的 不想用第三方语言

hellsam
hellsam · #6 · 7年之前

@channel 当然 不知道你知不知道有没有 GOLANG调用C# DLL的案列 。

channel
channel · #7 · 7年之前

@hellsam 你这是用 Go 写 Windows 图形界面?

hellsam
hellsam · #8 · 7年之前

@channel 不是 我没那么有空哦, 桌面程序还是C#效率点 GO我只喜欢用来开发WEB 既然想扔了C#了 不能这块问题卡在这里吧 总要解决吧, 不然这块用C#写 就不爽了,

hellsam
hellsam · #9 · 7年之前

@channel 其实就是操作一个WMI 大概几行代码就搞定了 就是不懂如何GO去操作

hellsam
hellsam · #10 · 7年之前

有人吗 没人等会再问问

jthmath
jthmath · #11 · 7年之前

我建议,先试试用C++或C#是否可行,毕竟go调com存在很多坑

hellsam
hellsam · #12 · 7年之前

@jthmath C# 可以的 我就是不想用C#实现 所以换GO的。 当然不知道可否GO调用C#的DLL

hellsam
hellsam · #13 · 7年之前

有高手懂的吗

czyt
czyt · #14 · 7年之前

wmi很有局限性,某些电脑 wmi是不能启动的,不要问我为什么知道,运维的 呵呵。 您可以参考下

hellsam
hellsam · #15 · 7年之前

@czyt 我知道 我那个WMI肯定是可以启动的, 因为我C#测试都通过的, 我想用GO来写, 所以如果懂的话 希望帮帮忙谢谢

czyt
czyt · #16 · 7年之前
hellsamhellsam #15 回复

@czyt 我知道 我那个WMI肯定是可以启动的, 因为我C#测试都通过的, 我想用GO来写, 所以如果懂的话 希望帮帮忙谢谢

引用的库 已经有一个不能用了

czyt
czyt · #17 · 7年之前
hellsam
hellsam · #18 · 7年之前

@czyt 这个我之前看过了 无法满足

添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传