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