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

2024-01-21 14:32

本文主要是介绍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所示:

VisualC#中用WMI编写网络应用程序

图01:组件服务窗口

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

VisualC#中用WMI编写网络应用程序

关闭WMI服务

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

VisualC#中用WMI编写网络应用程序

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

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

VisualC#中用WMI编写网络应用程序

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

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

VisualC#中用WMI编写网络应用程序

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

  通过上图,也可以发现计算机超级用户在默认状态的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远程控制pc或者获取远程pc的配置信息的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/629842

相关文章

鸿蒙中Axios数据请求的封装和配置方法

《鸿蒙中Axios数据请求的封装和配置方法》:本文主要介绍鸿蒙中Axios数据请求的封装和配置方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1.配置权限 应用级权限和系统级权限2.配置网络请求的代码3.下载在Entry中 下载AxIOS4.封装Htt

Spring中配置ContextLoaderListener方式

《Spring中配置ContextLoaderListener方式》:本文主要介绍Spring中配置ContextLoaderListener方式,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录Spring中配置ContextLoaderLishttp://www.chinasem.cntene

Python获取C++中返回的char*字段的两种思路

《Python获取C++中返回的char*字段的两种思路》有时候需要获取C++函数中返回来的不定长的char*字符串,本文小编为大家找到了两种解决问题的思路,感兴趣的小伙伴可以跟随小编一起学习一下... 有时候需要获取C++函数中返回来的不定长的char*字符串,目前我找到两种解决问题的思路,具体实现如下:

golang获取当前时间、时间戳和时间字符串及它们之间的相互转换方法

《golang获取当前时间、时间戳和时间字符串及它们之间的相互转换方法》:本文主要介绍golang获取当前时间、时间戳和时间字符串及它们之间的相互转换,本文通过实例代码给大家介绍的非常详细,感兴趣... 目录1、获取当前时间2、获取当前时间戳3、获取当前时间的字符串格式4、它们之间的相互转化上篇文章给大家介

浅谈配置MMCV环境,解决报错,版本不匹配问题

《浅谈配置MMCV环境,解决报错,版本不匹配问题》:本文主要介绍浅谈配置MMCV环境,解决报错,版本不匹配问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录配置MMCV环境,解决报错,版本不匹配错误示例正确示例总结配置MMCV环境,解决报错,版本不匹配在col

Nginx中配置HTTP/2协议的详细指南

《Nginx中配置HTTP/2协议的详细指南》HTTP/2是HTTP协议的下一代版本,旨在提高性能、减少延迟并优化现代网络环境中的通信效率,本文将为大家介绍Nginx配置HTTP/2协议想详细步骤,需... 目录一、HTTP/2 协议概述1.HTTP/22. HTTP/2 的核心特性3. HTTP/2 的优

Python 安装和配置flask, flask_cors的图文教程

《Python安装和配置flask,flask_cors的图文教程》:本文主要介绍Python安装和配置flask,flask_cors的图文教程,本文通过图文并茂的形式给大家介绍的非常详细,... 目录一.python安装:二,配置环境变量,三:检查Python安装和环境变量,四:安装flask和flas

Ubuntu中远程连接Mysql数据库的详细图文教程

《Ubuntu中远程连接Mysql数据库的详细图文教程》Ubuntu是一个以桌面应用为主的Linux发行版操作系统,这篇文章主要为大家详细介绍了Ubuntu中远程连接Mysql数据库的详细图文教程,有... 目录1、版本2、检查有没有mysql2.1 查询是否安装了Mysql包2.2 查看Mysql版本2.

Python获取中国节假日数据记录入JSON文件

《Python获取中国节假日数据记录入JSON文件》项目系统内置的日历应用为了提升用户体验,特别设置了在调休日期显示“休”的UI图标功能,那么问题是这些调休数据从哪里来呢?我尝试一种更为智能的方法:P... 目录节假日数据获取存入jsON文件节假日数据读取封装完整代码项目系统内置的日历应用为了提升用户体验,

微信公众号脚本-获取热搜自动新建草稿并发布文章

《微信公众号脚本-获取热搜自动新建草稿并发布文章》本来想写一个自动化发布微信公众号的小绿书的脚本,但是微信公众号官网没有小绿书的接口,那就写一个获取热搜微信普通文章的脚本吧,:本文主要介绍微信公众... 目录介绍思路前期准备环境要求获取接口token获取热搜获取热搜数据下载热搜图片给图片加上标题文字上传图片