C#利用Wmi远程控制pc或者获取远程pc的配置信息

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所示:

C#利用Wmi远程控制pc或者获取远程pc的配置信息

图01:组件服务窗口

  选中【名称】栏中"Windows Management Instrumentation",点击鼠标右键,在弹出的菜单中,选择【属性】,在【启动类型】选择框中选择"已禁用",然后在单击【停止】按钮,这样本地的WMI服务也就被关闭了。此时所有本地和远程的WMI调用均为非法。下图为关闭WMI服务后的界面:

C#利用Wmi远程控制pc或者获取远程pc的配置信息

关闭WMI服务

  计算机的超级用户在默认状态下拥有WMI的一切权限,并且可以为本地其他用户设置WMI权限。具体操作是,按顺序打开:【控制面板】|【管理工具】|【计算机管理】。选中【计算机管理】右边的【服务和应用程序】中的【WMI控件】。具体如图02所示:

C#利用Wmi远程控制pc或者获取远程pc的配置信息

图02:【计算机管理】对话框

  点击鼠标右键,在弹出的菜单中,选择【属性】。弹出【WMI控件属性】对话框中,选择【安全】页面。具体如图03所示:

C#利用Wmi远程控制pc或者获取远程pc的配置信息

图03: 打开WMI安全设置界面

  单击图9-4中【安全设置】按钮,弹出【安全设置Root】对话框,通过其中的【添加】和【删除】按钮,可以设定本地有哪些用户拥有WMI权限,并通过【权限】选择栏为每一个用户设置不同的权限,具体如图04所示:

C#利用Wmi远程控制pc或者获取远程pc的配置信息

图04:设定本地用户的WMI权限

  通过上图,也可以发现计算机超级用户在默认状态的WMI权限都是允许的,并且这些权限都是无法删除的。
那么现在我们就使用以下代码来实现这一效果,因为WMI的语句有点象SQL语句。
1C#利用Wmi远程控制pc或者获取远程pc的配置信息//win32_logicaldisk
2C#利用Wmi远程控制pc或者获取远程pc的配置信息//导入dll:解决方案==>引用==>添加引用==>COM==>System.Management.dll--C:/WINDOWS/Microsoft.NET/Framework/v1.1.4322
3C#利用Wmi远程控制pc或者获取远程pc的配置信息usingSystem;
4C#利用Wmi远程控制pc或者获取远程pc的配置信息usingSystem.Management;
5C#利用Wmi远程控制pc或者获取远程pc的配置信息classdisk//数据管理对象
6C#利用Wmi远程控制pc或者获取远程pc的配置信息C#利用Wmi远程控制pc或者获取远程pc的配置信息C#利用Wmi远程控制pc或者获取远程pc的配置信息{
7C#利用Wmi远程控制pc或者获取远程pc的配置信息publicstaticvoidMain()
8C#利用Wmi远程控制pc或者获取远程pc的配置信息C#利用Wmi远程控制pc或者获取远程pc的配置信息C#利用Wmi远程控制pc或者获取远程pc的配置信息{
9C#利用Wmi远程控制pc或者获取远程pc的配置信息//创建C:的实例
10C#利用Wmi远程控制pc或者获取远程pc的配置信息ManagementObjectdisk=newManagementObject("win32_logicaldisk.deviceid=/"c:/"");
11C#利用Wmi远程控制pc或者获取远程pc的配置信息disk.Get();
12C#利用Wmi远程控制pc或者获取远程pc的配置信息Console.WriteLine("磁盘大小"+disk["Size"]+"bytes");//打印C:大小,单位bytes
13C#利用Wmi远程控制pc或者获取远程pc的配置信息}

14C#利用Wmi远程控制pc或者获取远程pc的配置信息}

15C#利用Wmi远程控制pc或者获取远程pc的配置信息
16C#利用Wmi远程控制pc或者获取远程pc的配置信息
17C#利用Wmi远程控制pc或者获取远程pc的配置信息
18C#利用Wmi远程控制pc或者获取远程pc的配置信息确定计算机名称或IP地址是物理计算机还是虚拟IP地址CIMV2:Win32_ComputerSystem
19C#利用Wmi远程控制pc或者获取远程pc的配置信息在远程计算机上运行进程CIMV2:Win32_Process
20C#利用Wmi远程控制pc或者获取远程pc的配置信息确定远程计算机中是否存在某个目录CIMV2:Win32_Directory
21C#利用Wmi远程控制pc或者获取远程pc的配置信息停止/启动IISSystem.Diagnostics.Process
22C#利用Wmi远程控制pc或者获取远程pc的配置信息将程序集添加到全局程序集缓存(GAC)System.Diagnostics.Process
23C#利用Wmi远程控制pc或者获取远程pc的配置信息注册和配置GAM组件COMAdmin目录(COM1.0)
24C#利用Wmi远程控制pc或者获取远程pc的配置信息创建Web站点System.DirectoryServices.DirectoryEntry
25C#利用Wmi远程控制pc或者获取远程pc的配置信息
26C#利用Wmi远程控制pc或者获取远程pc的配置信息//可以用此方法来选择集合中的部份记录"SELECT*FROMWin32_ServiceWHEREName='ServiceName'",
27C#利用Wmi远程控制pc或者获取远程pc的配置信息
28C#利用Wmi远程控制pc或者获取远程pc的配置信息"Win32_LogicalDisk"//通过它我们可以查看到本地驱动器
29C#利用Wmi远程控制pc或者获取远程pc的配置信息
30C#利用Wmi远程控制pc或者获取远程pc的配置信息ManagementObjectSearcherquery=newManagementObjectSearcher("SELECT*FromWin32_LogicalDisk");//查询
31C#利用Wmi远程控制pc或者获取远程pc的配置信息ManagementObjectCollectionqueryCollection=query.Get();//Get获取集合并赋给Collention
32C#利用Wmi远程控制pc或者获取远程pc的配置信息foreach(ManagementObjectmoinqueryCollection)//偏历集合
33C#利用Wmi远程控制pc或者获取远程pc的配置信息C#利用Wmi远程控制pc或者获取远程pc的配置信息C#利用Wmi远程控制pc或者获取远程pc的配置信息{
34C#利用Wmi远程控制pc或者获取远程pc的配置信息Console.WriteLine("type:"+mo["DriveType"].ToString());
35C#利用Wmi远程控制pc或者获取远程pc的配置信息sConsole.WriteLine("Drive:"+mo["Name"].ToString());//打印出所有驱动器
36C#利用Wmi远程控制pc或者获取远程pc的配置信息}

37C#利用Wmi远程控制pc或者获取远程pc的配置信息
38C#利用Wmi远程控制pc或者获取远程pc的配置信息
39C#利用Wmi远程控制pc或者获取远程pc的配置信息"Win32_Environment"//环境变量
40C#利用Wmi远程控制pc或者获取远程pc的配置信息usingSystem;
41C#利用Wmi远程控制pc或者获取远程pc的配置信息usingSystem.Management;
42C#利用Wmi远程控制pc或者获取远程pc的配置信息publicclassEnumerateInstances
43C#利用Wmi远程控制pc或者获取远程pc的配置信息C#利用Wmi远程控制pc或者获取远程pc的配置信息C#利用Wmi远程控制pc或者获取远程pc的配置信息{
44C#利用Wmi远程控制pc或者获取远程pc的配置信息publicstaticvoidMain()
45C#利用Wmi远程控制pc或者获取远程pc的配置信息C#利用Wmi远程控制pc或者获取远程pc的配置信息C#利用Wmi远程控制pc或者获取远程pc的配置信息{
46C#利用Wmi远程控制pc或者获取远程pc的配置信息SelectQueryquery=newSelectQuery("Win32_Environment");
47C#利用Wmi远程控制pc或者获取远程pc的配置信息ManagementObjectSearchersearcher=newManagementObjectSearcher(query);
48C#利用Wmi远程控制pc或者获取远程pc的配置信息foreach(ManagementBaseObjectenvVarinsearcher.Get())
49C#利用Wmi远程控制pc或者获取远程pc的配置信息Console.WriteLine("Variable:{0},Value={1}",envVar["Name"],envVar["VariableValue"]);
50C#利用Wmi远程控制pc或者获取远程pc的配置信息}

51C#利用Wmi远程控制pc或者获取远程pc的配置信息}

52C#利用Wmi远程控制pc或者获取远程pc的配置信息
53C#利用Wmi远程控制pc或者获取远程pc的配置信息"Win32_OperatingSystem"//操作系统信息
54C#利用Wmi远程控制pc或者获取远程pc的配置信息Console.WriteLine("操作系统:"+mo["Caption"]);
55C#利用Wmi远程控制pc或者获取远程pc的配置信息Console.WriteLine("版本号:"+mo["Version"]);
56C#利用Wmi远程控制pc或者获取远程pc的配置信息Console.WriteLine("制造商:"+mo["Manufacturer"]);
57C#利用Wmi远程控制pc或者获取远程pc的配置信息Console.WriteLine("计算机名:"+mo["csname"]);
58C#利用Wmi远程控制pc或者获取远程pc的配置信息Console.WriteLine("Windows目录:"+mo["WindowsDirectory"]);
59C#利用Wmi远程控制pc或者获取远程pc的配置信息
60C#利用Wmi远程控制pc或者获取远程pc的配置信息"Win32_Service"//系统服务
61C#利用Wmi远程控制pc或者获取远程pc的配置信息
62C#利用Wmi远程控制pc或者获取远程pc的配置信息//输出默认站点的目录结构
63C#利用Wmi远程控制pc或者获取远程pc的配置信息usingSystem;
64C#利用Wmi远程控制pc或者获取远程pc的配置信息usingSystem.DirectoryServices;
65C#利用Wmi远程控制pc或者获取远程pc的配置信息classIISFolderList
66C#利用Wmi远程控制pc或者获取远程pc的配置信息C#利用Wmi远程控制pc或者获取远程pc的配置信息C#利用Wmi远程控制pc或者获取远程pc的配置信息{
67C#利用Wmi远程控制pc或者获取远程pc的配置信息staticvoidListFolder(DirectoryEntryparaEntry,intparaIndent)
68C#利用Wmi远程控制pc或者获取远程pc的配置信息C#利用Wmi远程控制pc或者获取远程pc的配置信息C#利用Wmi远程控制pc或者获取远程pc的配置信息{
69C#利用Wmi远程控制pc或者获取远程pc的配置信息for(inti=paraIndent;i>0;i--)
70C#利用Wmi远程控制pc或者获取远程pc的配置信息Console.Write('');
71C#利用Wmi远程控制pc或者获取远程pc的配置信息Console.WriteLine(paraEntry.Name);
72C#利用Wmi远程控制pc或者获取远程pc的配置信息paraIndent++;
73C#利用Wmi远程控制pc或者获取远程pc的配置信息foreach(DirectoryEntrytempEntryinparaEntry.Children)
74C#利用Wmi远程控制pc或者获取远程pc的配置信息ListFolder(tempEntry,paraIndent);
75C#利用Wmi远程控制pc或者获取远程pc的配置信息paraEntry.Dispose();
76C#利用Wmi远程控制pc或者获取远程pc的配置信息}

77C#利用Wmi远程控制pc或者获取远程pc的配置信息staticvoidMain(string[]args)
78C#利用Wmi远程控制pc或者获取远程pc的配置信息C#利用Wmi远程控制pc或者获取远程pc的配置信息C#利用Wmi远程控制pc或者获取远程pc的配置信息{
79C#利用Wmi远程控制pc或者获取远程pc的配置信息ListFolder(newDirectoryEntry("IIS://localhost/W3SVC/1/Root"),0);
80C#利用Wmi远程控制pc或者获取远程pc的配置信息}

81C#利用Wmi远程控制pc或者获取远程pc的配置信息}

82C#利用Wmi远程控制pc或者获取远程pc的配置信息