日期:2008-12-27  浏览次数:20432 次

 Windows管理仪器(WMI)在本地建立一个WINMSD是非常有用的,如果将其放在局域网中,那就更加有用了。

  很多公司都拥有成千上万台计算机,他们都想将这些列表进行储存管理,但是又不想花费昂贵的价格去购买微软的SMS产品,此时只要你指要你指定你的IP列表,并告诉服务器去扫描这些计算机信息,一个通霄这个问题就解决了,也许你还想把这些数据入库呢:)注意WMI支持收集性能数据。

  WMI在Win2000以上的版本中被默认安装,在NT4中使用WMI则需要下载WMI核心程序(在VS.Net的安装盘中就有这个程序),当然操作WMI的前提是你有管理的权限。

  下面是一个收集信息的例子:

using System;
using System.Management;

namespace WMI2
{
   ///


   /// Summary description for Class1.
   ///

   class Class1
   {
      static void Main(string[] args)
      {
         Console.WriteLine("Computer details retrieved using Windows Management Instrumentation (WMI)");
Console.WriteLine("mailto:Written%2001/23/02%20By%20John%20O'Donnell%20-%20csharpconsulting@hotmail.com");
Console.WriteLine("=========================================================================");

         //连接远程计算机
      ConnectionOptions co = new ConnectionOptions();
      co.Username = "john";
      co.Password = "john";
      System.Management.ManagementScope ms = new System.Management.ManagementScope("\\\\192.168.1.4\\root\\cimv2", co);

         //查询远程计算机
      System.Management.ObjectQuery oq = new System.Management.ObjectQuery("SELECT * FROM Win32_OperatingSystem");
      ManagementObjectSearcher query1 = new ManagementObjectSearcher(ms,oq);
      ManagementObjectCollection queryCollection1 = query1.Get();

         foreach( ManagementObject mo in queryCollection1 )
         {
            Console.WriteLine("Name : " + mo["name"].ToString());
            Console.WriteLine("Version : " + mo["version"].ToString());
            Console.WriteLine("Manufacturer : " + mo["Manufacturer"].ToString());
            Console.WriteLine("Computer Name : " +mo["csname"].ToString());
            Console.WriteLine("Windows Directory : " +mo["WindowsDirectory"].ToString());
}

         oq = new System.Management.ObjectQuery("SELECT * FROM Win32_ComputerSystem");
         query1 = new ManagementObjectSearcher(ms,oq) ;
         queryCollection1 = query1.Get();

         foreach( ManagementObject mo in queryCollection1 )
         {
            Console.WriteLine(mo["systemtype"].ToString());
            Console.WriteLine("Total Physical Memory : " + mo["totalphysicalmemory"].ToString());

         }

         oq = new System.Management.ObjectQuery("SELECT * FROM Win32_processor") ;

         query1 = new ManagementObjectSearcher(ms,oq) ;
         queryCollection1 = query1.Get();
         foreach( ManagementObject mo in queryCollection1 )
         {
            Console.WriteLine(mo["caption"].ToString());
         }

         oq = new System.Management.ObjectQuery("SELECT * FROM Win32_bios");
         query1 = new ManagementObjectSearcher(ms,oq) ;
         queryCollection1 = query1.Get();

         foreach( ManagementObject mo in queryCollection1 )
         {
            Console.WriteLine(mo["version"].ToString());
         }
      }
   }
}