制作了一个WMI 查询分析工具

简介:
按微软的介绍大致如下:
WMI 是 Microsoft 主要的针对 Windows 的管理支持技术。在 WMI 之前,所有的 Windows 图形化管理工具都依赖于 Win32 应用程序编程接口(Application Programming Interfaces,APIs)来访问和管理 Windows 资源。在 WMI 之前,能够以编程方式访问 Windows 资源的惟一方法就是通过 Win32 API。这种情况使 Windows 系统管理员无法通过一种简便的方法利用常见的脚本语言来自动化常用的系统管理任务,因为大多数脚本语言都不能直接调用 Win32 API。通过提供一致的模型和框架,WMI 改变了这种情况 — 通过模型和框架,所有的 Windows 资源均被描述并公开给外界。最好的一点是,系统管理员可以使用 WMI 脚本库创建系统管理脚本,从而管理任何通过 WMI 公开的 Windows 资源!

我已经不记得什么时候就知道的这个WMI,但直到今天才认真的学学;可能是采用SQL的语法吸引了我吧,至少用它来做到“windows 优化大师”所获取的系统信息是很容易的。晚上一直在弄这个小程序,因为WMI设计到windows的方方面面,所以我想做一个想sqlserver带的查询分析器的工具,专门用于调试WMI的查询;用了后才发现使用起来确实方便,.net提供一个System.Management.ManagementObjectSearcher类,用它很简单的就可操作WMI;如下是简单实例:

None.gif ManagementObjectSearcher search = new ManagementObjectSearcher("SELECT * FROM Win32_ComputerSystem");
None.gif sysInfoListTest.Items.Clear();
None.gif sysInfoListTest.Items.Add("Computer System Information");
None.gif foreach(ManagementObject info in search.Get())
ExpandedBlockStart.gif ContractedBlock.gif dot.gif {
InBlock.gif sysInfoListTest.Items.Add("Manufacturer: " + info["manufacturer"].ToString());
InBlock.gif sysInfoListTest.Items.Add("Model: " + info["model"].ToString());
InBlock.gif sysInfoListTest.Items.Add("System Type: " + info["systemtype"].ToString());
InBlock.gif sysInfoListTest.Items.Add("Total Physical Memory: " + info["totalphysicalmemory"].ToString());
ExpandedBlockEnd.gif }

这个是访问计算机系统的一些基础信息,比如可以知道系统的“物理内存”大小;

我在程序里实现了一个内存表,专门用于dataGrid来显示数据,通过访问 ManagementObject的属性信息,把每个类的名称作为列显示出来;下面的代码就是实现的核心:
None.gif foreach(ManagementObject mo in mos.Get())
ExpandedBlockStart.gif ContractedBlock.gif dot.gif {
InBlock.gif DataRow dr = dt.NewRow();
InBlock.gif
InBlock.gif PropertyDataCollection.PropertyDataEnumerator oEnum;
InBlock.gif//显示系统类
InBlock.gif
//获取属性,系统类
InBlock.gif
oEnum = (mo.Properties.GetEnumerator() as PropertyDataCollection.PropertyDataEnumerator);
InBlock.gifwhile(oEnum.MoveNext())
ExpandedSubBlockStart.gifContractedSubBlock.gifdot.gif{
InBlock.gif PropertyData prop = (PropertyData)oEnum.Current;
InBlock.gifif(dt.Columns.IndexOf(prop.Name)==-1)
ExpandedSubBlockStart.gifContractedSubBlock.gifdot.gif{
InBlock.gif dt.Columns.Add(prop.Name);
InBlock.gif Console.Out.WriteLine(prop.Name);
InBlock.gif dt.Columns[dt.Columns.Count-1].DefaultValue = "";
ExpandedSubBlockEnd.gif }

InBlock.giftry
ExpandedSubBlockStart.gifContractedSubBlock.gifdot.gif{
InBlock.gif//该类未实例化,所以需要异常结构,表示为null
InBlock.gif
dr[prop.Name] = mo[prop.Name].ToString();
InBlock.gif Console.Out.WriteLine(prop.Name + " row");
ExpandedSubBlockEnd.gif }

InBlock.gifcatch
ExpandedSubBlockStart.gifContractedSubBlock.gifdot.gif{
InBlock.gif Console.Out.WriteLine(prop.Name + " row error");
ExpandedSubBlockEnd.gif }

ExpandedSubBlockEnd.gif }

ExpandedBlockEnd.gif }


可以看到这句代码 :
mo.Properties.GetEnumerator() as PropertyDataCollection.PropertyDataEnumerator
这里的Properties所访问的是非系统属性集合,既然是调试工具那么就得把SystemProperties也列出来,实现的过程同上。

下面的帖图是运行界面:

WQLface.png
PS:我刻意缩小了,因为每次帖的图片过大了


下次再实现读出所有的可访问的类;




本文转自suifei博客园博客,原文链接:http://www.cnblogs.com/Chinasf/archive/2005/05/26/162545.html,如需转载请自行联系原作者

相关文章
|
3天前
|
安全 BI Windows
LabVIEW报表生成工具包时出现错误-41106
LabVIEW报表生成工具包时出现错误-41106
|
10月前
|
数据可视化 定位技术
ArcGIS应用基础1 数据显示、查询及可视化
😃在本文中,你将学会ArcGIS中数据查看、信息检索、要素符号化及要素标注的基本流程。
156 0
|
12月前
|
搜索推荐 网络安全 API
GUI图形化渗透测试信息搜集Tools
GUI图形化渗透测试信息搜集Tools
149 0
|
12月前
|
网络协议 数据安全/隐私保护
|
Linux
FuYao扶摇一款开源的信息收集工具
FuYao扶摇一款开源的信息收集工具
485 0
FuYao扶摇一款开源的信息收集工具
|
存储 XML JSON
Amass信息收集神器使用指南
OWASP Amass项目使用开源信息收集和主动侦察技术,对攻击面和外部资产发现进行网络映射。
880 0
Amass信息收集神器使用指南
|
人工智能 数据可视化 搜索推荐
Facebook开发实时分析控制面板
据国外媒体报道,Facebook正在开发一个新的控制面板,以便让开发人员能够更好地看到他们的Facebook应用程序。旧的控制面板包含的数据通常不超过48小时。新的分析控制面板将是实时的。而数据将是匿名的,你无法查看是谁在看什么东西,只能看到不同内容的人气。
842 0