我想 用WMI 根据不同的计算机查询出他们的IP地址 ,循环显示在datagirdview中。 还有个问题,用WMI能查询出 AD域中所有计算机吗? 如果可以的话应该怎么做。最好能给段代码,分不够还可以加!

解决方案 »

  1.   

    WMI只要给定了计算机名或IP,以及用户名密码和所在域,就可以查询该计算机上的信息。(windows)
    要得到所有域中的计算机,可以通过AD来进行搜索。
      

  2.   

    WMI应该可以实现吧,关键还是权限问题吧。以前了解过一点WMI相关的内容,记在自己的Blog里了,希望对你理解WMI的基本结构和基本的使用方法能有所帮助
    http://blog.vckbase.com/abbey/category/34.html?Show=All
      

  3.   

    WMI查询远程计算机安装软件的代码   static void Main(string[] args)
            {
                string regMain = "Software//Microsoft//Windows//CurrentVersion//Uninstall";
                string[] subKey = { "DisplayName" };
                ManagementClass mClass = new ManagementClass(@"//" + "计算机名orIP" + @"/root/DEFAULT:StdRegProv");
                mClass.Scope.Options.Password = "password";//密码
                mClass.Scope.Options.Username = "Administrator";//用户名
                mClass.Scope.Options.Authority = "NTLMDOMAIN:DOMAIN";//如果是本机用户,则填写DOMAIN;域用户,则填写所在域
                object[] method_args = new object[] { 0x80000002, regMain, null };
                object result = mClass.InvokeMethod("EnumKey", method_args);//得到所有子键
                string[] sAppList = (String[])method_args[2];//保存子键
                foreach (string sName in sAppList)
                {
                    ManagementBaseObject inParams = mClass.GetMethodParameters("GetStringValue");
                    inParams["hDefKey"] = 0x80000002;
                    inParams["sSubKeyName"] = regMain + @"/" +sName;
                    inParams["sValueName"] = "DisplayName";
                    ManagementBaseObject curRes = mClass.InvokeMethod("GetStringValue", inParams, null);//得到显示名
                    if (curRes["sValue"] != null)
                    {
                        string keyValue = curRes["sValue"].ToString();
                        Console.WriteLine(keyValue);//列出所有软件名
                    }
                }
               Console.ReadKey();
       }
      

  4.   

    WMI 的一个实现这个链接,是以前我翻译过的一篇WMI的文章,附有代码。里面应该有你需要的内容了。不过好象没有涉及活动目录的部分。 
      

  5.   

    上面贴的代码有点看不懂,怎么这么复杂啊,直接写一句MQL语句不行吗。还有能不能不写用户名和密码啊!直接查询域中计算机的信息!