WMI是Windows Management Instrumentation的简称,即:视窗管理规范。在Windows 2000或以后的版本中均安装得有,NT4.0则需要安装WMI的核心组件。通过WMI可以获取远程计算机的各种数据信息,控制远程计算机的各种行为,而这就像操作本地机一样方便、简单。
  一.WMI简介
  WMI从根本上说应该为一种服务,并且对于本地不同的用户,WMI所有的权限也不一样。计算机超级用户可以为计算机中的每一个用户,设定不同的WMI权限。在默认状态下,超级用户拥有WMI的一切权限。提供WMI服务是通过程序"WinMgmt.exe"来实现的。可以从"System32\Wbem"目录中找到这个文件。
  既然是服务,计算机使用者就可以享受这种服务,同样也可以关闭这种服务。具体的操作是:按顺序打开【控制面板】|【管理工具】|【组件服务】。WMI服务在组件服务中的显示名称为"Windows Management Instrumentation"。具体如下图01所示:
|  图01:组件服务窗口 | 
选中【名称】栏中"Windows Management Instrumentation",点击鼠标右键,在弹出的菜单中,选择【属性】,在【启动类型】选择框中选择"已禁用",然后在单击【停止】按钮,这样本地的WMI服务也就被关闭了。此时所有本地和远程的WMI调用均为非法。下图为关闭WMI服务后的界面:
|  关闭WMI服务 | 
计算机的超级用户在默认状态下拥有WMI的一切权限,并且可以为本地其他用户设置WMI权限。具体操作是,按顺序打开:【控制面板】|【管理工具】|【计算机管理】。选中【计算机管理】右边的【服务和应用程序】中的【WMI控件】。具体如图02所示:
|  图02:【计算机管理】对话框 | 
点击鼠标右键,在弹出的菜单中,选择【属性】。弹出【WMI控件属性】对话框中,选择【安全】页面。具体如图03所示:
|  图03: 打开WMI安全设置界面 | 
单击图9-4中【安全设置】按钮,弹出【安全设置Root】对话框,通过其中的【添加】和【删除】按钮,可以设定本地有哪些用户拥有WMI权限,并通过【权限】选择栏为每一个用户设置不同的权限,具体如图04所示:
|  图04:设定本地用户的WMI权限 | 
通过上图,也可以发现计算机超级用户在默认状态的WMI权限都是允许的,并且这些权限都是无法删除的。
那么现在我们就使用以下代码来实现这一效果,因为WMI的语句有点象SQL语句。
 1 //win32_logicaldisk
//win32_logicaldisk
2 //导入dll:解决方案 ==> 引用 ==> 添加引用 ==> COM ==> System.Management.dll --C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322
//导入dll:解决方案 ==> 引用 ==> 添加引用 ==> COM ==> System.Management.dll --C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322
3 using System;
using System;
4 using System.Management;
using System.Management;
5 class disk //数据管理对象
class disk //数据管理对象
6 {
{
7 public static void Main()
   public static void Main()
8 {
   {
9 //创建 C: 的实例
      //创建 C: 的实例
10 ManagementObject disk = new ManagementObject("win32_logicaldisk.deviceid=\"c:\"");
      ManagementObject disk = new ManagementObject("win32_logicaldisk.deviceid=\"c:\"");
11 disk.Get();
      disk.Get(); 
12 Console.WriteLine("磁盘大小"+disk["Size"]+"bytes"); //打印C:大小,单位bytes
      Console.WriteLine("磁盘大小"+disk["Size"]+"bytes"); //打印C:大小,单位bytes
13 }
   }
14 }
} 
15
16 
 
17
18 确定计算机名称或 IP 地址是物理计算机还是虚拟 IP 地址 CIMV2:Win32_ComputerSystem
确定计算机名称或 IP 地址是物理计算机还是虚拟 IP 地址 CIMV2:Win32_ComputerSystem
19 在远程计算机上运行进程 CIMV2:Win32_Process
在远程计算机上运行进程 CIMV2:Win32_Process
20 确定远程计算机中是否存在某个目录 CIMV2:Win32_Directory
确定远程计算机中是否存在某个目录 CIMV2:Win32_Directory 
21 停止/启动 IIS System.Diagnostics.Process
停止/启动 IIS System.Diagnostics.Process
22 将程序集添加到全局程序集缓存 (GAC) System.Diagnostics.Process
将程序集添加到全局程序集缓存 (GAC) System.Diagnostics.Process
23 注册和配置 GAM 组件 COMAdmin 目录 (COM 1.0)
注册和配置 GAM 组件 COMAdmin 目录 (COM 1.0) 
24 创建 Web 站点 System.DirectoryServices.DirectoryEntry
创建 Web 站点 System.DirectoryServices.DirectoryEntry 
25
26 //可以用此方法来选择集合中的部份记录 "SELECT * FROM Win32_Service WHERE Name = 'ServiceName'",
//可以用此方法来选择集合中的部份记录 "SELECT * FROM Win32_Service WHERE Name = 'ServiceName'",
27
28 "Win32_LogicalDisk" 类 //通过它我们可以查看到本地驱动器
"Win32_LogicalDisk" 类 //通过它我们可以查看到本地驱动器
29
30 ManagementObjectSearcher query = new ManagementObjectSearcher("SELECT * From Win32_LogicalDisk "); //查询
ManagementObjectSearcher query = new ManagementObjectSearcher("SELECT * From Win32_LogicalDisk "); //查询
31 ManagementObjectCollection queryCollection = query.Get(); //Get获取集合并赋给 Collention
ManagementObjectCollection queryCollection = query.Get(); //Get获取集合并赋给 Collention
32 foreach ( ManagementObject mo in queryCollection) //偏历集合
foreach ( ManagementObject mo in queryCollection) //偏历集合
33 {
{ 
34 Console.WriteLine("type:"+mo["DriveType"].ToString());
   Console.WriteLine("type:"+mo["DriveType"].ToString());
35 sConsole.WriteLine("Drive: " + mo["Name"].ToString()); //打印出所有驱动器
   sConsole.WriteLine("Drive: " + mo["Name"].ToString()); //打印出所有驱动器
36 }
}
37
38
39 "Win32_Environment" 类 //环境变量
"Win32_Environment" 类 //环境变量
40 using System;
using System;
41 using System.Management;
using System.Management;
42 public class EnumerateInstances
public class EnumerateInstances
43 {
{
44 public static void Main()
   public static void Main() 
45 {
   {
46 SelectQuery query = new SelectQuery("Win32_Environment");
      SelectQuery query = new SelectQuery("Win32_Environment");
47 ManagementObjectSearcher searcher = new ManagementObjectSearcher(query);
      ManagementObjectSearcher searcher = new ManagementObjectSearcher(query); 
48 foreach (ManagementBaseObject envVar in searcher.Get())
      foreach (ManagementBaseObject envVar in searcher.Get())
49 Console.WriteLine("Variable : {0}, Value = {1}",envVar["Name"],envVar["VariableValue"]);
         Console.WriteLine("Variable : {0}, Value = {1}",envVar["Name"],envVar["VariableValue"]);
50 }
   }
51 }
}
52
53 "Win32_OperatingSystem" 类 //操作系统信息
"Win32_OperatingSystem" 类 //操作系统信息
54 Console.WriteLine( "操作系统: " + mo["Caption"]);
Console.WriteLine( "操作系统: " + mo["Caption"]);
55 Console.WriteLine( "版本号: " + mo["Version"]);
Console.WriteLine( "版本号: " + mo["Version"]);
56 Console.WriteLine( "制造商: " + mo["Manufacturer"]);
Console.WriteLine( "制造商: " + mo["Manufacturer"]);
57 Console.WriteLine( "计算机名: " +mo["csname"]);
Console.WriteLine( "计算机名: " +mo["csname"]);
58 Console.WriteLine("Windows目录: " + mo["WindowsDirectory"]);
Console.WriteLine("Windows目录: " + mo["WindowsDirectory"]);
59
60 "Win32_Service" 类 //系统服务
"Win32_Service" 类 //系统服务
61
62 //输出默认站点的目录结构
//输出默认站点的目录结构
63 using System;
using System; 
64 using System.DirectoryServices;
using System.DirectoryServices; 
65 class IISFolderList
class IISFolderList 
66 {
{ 
67 static void ListFolder(DirectoryEntry paraEntry, int paraIndent)
   static void ListFolder(DirectoryEntry paraEntry, int paraIndent) 
68 {
   { 
69 for(int i=paraIndent; i>0; i--)
      for(int i=paraIndent; i>0; i--) 
70 Console.Write(' ');
      Console.Write(' '); 
71 Console.WriteLine(paraEntry.Name);
      Console.WriteLine(paraEntry.Name); 
72 paraIndent++;
      paraIndent++; 
73 foreach(DirectoryEntry tempEntry in paraEntry.Children)
      foreach(DirectoryEntry tempEntry in paraEntry.Children) 
74 ListFolder(tempEntry,paraIndent);
         ListFolder(tempEntry,paraIndent); 
75 paraEntry.Dispose();
      paraEntry.Dispose(); 
76 }
   } 
77 static void Main(string[] args)
   static void Main(string[] args) 
78 {
   { 
79 ListFolder(new DirectoryEntry("IIS://localhost/W3SVC/1/Root"),0);
      ListFolder(new DirectoryEntry("IIS://localhost/W3SVC/1/Root"),0); 
80 }
   } 
81 }
} 
82
 //win32_logicaldisk
//win32_logicaldisk2
 //导入dll:解决方案 ==> 引用 ==> 添加引用 ==> COM ==> System.Management.dll --C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322
//导入dll:解决方案 ==> 引用 ==> 添加引用 ==> COM ==> System.Management.dll --C:\WINDOWS\Microsoft.NET\Framework\v1.1.43223
 using System;
using System;4
 using System.Management;
using System.Management;5
 class disk //数据管理对象
class disk //数据管理对象6
 {
{7
 public static void Main()
   public static void Main()8
 {
   {9
 //创建 C: 的实例
      //创建 C: 的实例10
 ManagementObject disk = new ManagementObject("win32_logicaldisk.deviceid=\"c:\"");
      ManagementObject disk = new ManagementObject("win32_logicaldisk.deviceid=\"c:\"");11
 disk.Get();
      disk.Get(); 12
 Console.WriteLine("磁盘大小"+disk["Size"]+"bytes"); //打印C:大小,单位bytes
      Console.WriteLine("磁盘大小"+disk["Size"]+"bytes"); //打印C:大小,单位bytes13
 }
   }14
 }
} 15

16
 
 17

18
 确定计算机名称或 IP 地址是物理计算机还是虚拟 IP 地址 CIMV2:Win32_ComputerSystem
确定计算机名称或 IP 地址是物理计算机还是虚拟 IP 地址 CIMV2:Win32_ComputerSystem19
 在远程计算机上运行进程 CIMV2:Win32_Process
在远程计算机上运行进程 CIMV2:Win32_Process20
 确定远程计算机中是否存在某个目录 CIMV2:Win32_Directory
确定远程计算机中是否存在某个目录 CIMV2:Win32_Directory 21
 停止/启动 IIS System.Diagnostics.Process
停止/启动 IIS System.Diagnostics.Process22
 将程序集添加到全局程序集缓存 (GAC) System.Diagnostics.Process
将程序集添加到全局程序集缓存 (GAC) System.Diagnostics.Process23
 注册和配置 GAM 组件 COMAdmin 目录 (COM 1.0)
注册和配置 GAM 组件 COMAdmin 目录 (COM 1.0) 24
 创建 Web 站点 System.DirectoryServices.DirectoryEntry
创建 Web 站点 System.DirectoryServices.DirectoryEntry 25

26
 //可以用此方法来选择集合中的部份记录 "SELECT * FROM Win32_Service WHERE Name = 'ServiceName'",
//可以用此方法来选择集合中的部份记录 "SELECT * FROM Win32_Service WHERE Name = 'ServiceName'",27

28
 "Win32_LogicalDisk" 类 //通过它我们可以查看到本地驱动器
"Win32_LogicalDisk" 类 //通过它我们可以查看到本地驱动器29

30
 ManagementObjectSearcher query = new ManagementObjectSearcher("SELECT * From Win32_LogicalDisk "); //查询
ManagementObjectSearcher query = new ManagementObjectSearcher("SELECT * From Win32_LogicalDisk "); //查询31
 ManagementObjectCollection queryCollection = query.Get(); //Get获取集合并赋给 Collention
ManagementObjectCollection queryCollection = query.Get(); //Get获取集合并赋给 Collention32
 foreach ( ManagementObject mo in queryCollection) //偏历集合
foreach ( ManagementObject mo in queryCollection) //偏历集合33
 {
{ 34
 Console.WriteLine("type:"+mo["DriveType"].ToString());
   Console.WriteLine("type:"+mo["DriveType"].ToString());35
 sConsole.WriteLine("Drive: " + mo["Name"].ToString()); //打印出所有驱动器
   sConsole.WriteLine("Drive: " + mo["Name"].ToString()); //打印出所有驱动器36
 }
}37

38

39
 "Win32_Environment" 类 //环境变量
"Win32_Environment" 类 //环境变量40
 using System;
using System;41
 using System.Management;
using System.Management;42
 public class EnumerateInstances
public class EnumerateInstances43
 {
{44
 public static void Main()
   public static void Main() 45
 {
   {46
 SelectQuery query = new SelectQuery("Win32_Environment");
      SelectQuery query = new SelectQuery("Win32_Environment");47
 ManagementObjectSearcher searcher = new ManagementObjectSearcher(query);
      ManagementObjectSearcher searcher = new ManagementObjectSearcher(query); 48
 foreach (ManagementBaseObject envVar in searcher.Get())
      foreach (ManagementBaseObject envVar in searcher.Get())49
 Console.WriteLine("Variable : {0}, Value = {1}",envVar["Name"],envVar["VariableValue"]);
         Console.WriteLine("Variable : {0}, Value = {1}",envVar["Name"],envVar["VariableValue"]);50
 }
   }51
 }
}52

53
 "Win32_OperatingSystem" 类 //操作系统信息
"Win32_OperatingSystem" 类 //操作系统信息54
 Console.WriteLine( "操作系统: " + mo["Caption"]);
Console.WriteLine( "操作系统: " + mo["Caption"]);55
 Console.WriteLine( "版本号: " + mo["Version"]);
Console.WriteLine( "版本号: " + mo["Version"]);56
 Console.WriteLine( "制造商: " + mo["Manufacturer"]);
Console.WriteLine( "制造商: " + mo["Manufacturer"]);57
 Console.WriteLine( "计算机名: " +mo["csname"]);
Console.WriteLine( "计算机名: " +mo["csname"]);58
 Console.WriteLine("Windows目录: " + mo["WindowsDirectory"]);
Console.WriteLine("Windows目录: " + mo["WindowsDirectory"]);59

60
 "Win32_Service" 类 //系统服务
"Win32_Service" 类 //系统服务61

62
 //输出默认站点的目录结构
//输出默认站点的目录结构63
 using System;
using System; 64
 using System.DirectoryServices;
using System.DirectoryServices; 65
 class IISFolderList
class IISFolderList 66
 {
{ 67
 static void ListFolder(DirectoryEntry paraEntry, int paraIndent)
   static void ListFolder(DirectoryEntry paraEntry, int paraIndent) 68
 {
   { 69
 for(int i=paraIndent; i>0; i--)
      for(int i=paraIndent; i>0; i--) 70
 Console.Write(' ');
      Console.Write(' '); 71
 Console.WriteLine(paraEntry.Name);
      Console.WriteLine(paraEntry.Name); 72
 paraIndent++;
      paraIndent++; 73
 foreach(DirectoryEntry tempEntry in paraEntry.Children)
      foreach(DirectoryEntry tempEntry in paraEntry.Children) 74
 ListFolder(tempEntry,paraIndent);
         ListFolder(tempEntry,paraIndent); 75
 paraEntry.Dispose();
      paraEntry.Dispose(); 76
 }
   } 77
 static void Main(string[] args)
   static void Main(string[] args) 78
 {
   { 79
 ListFolder(new DirectoryEntry("IIS://localhost/W3SVC/1/Root"),0);
      ListFolder(new DirectoryEntry("IIS://localhost/W3SVC/1/Root"),0); 80
 }
   } 81
 }
} 82

 
 
                    
                     
                    
                 
                    
                 


 
    
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号