利用Javascript通过WMI取得Windows系统信息

用户访问web服务出错时若是能得到用户的系统配置信息,想必是极好的。

我们惯用的做法是在用户的机器上运行一些程序,得到用户的系统信息,而一般的web页面,根据http信息,往往只能得到客户的浏览器和简单的系统信息,得不到系统的详尽物理信息等。

现在我们尝试一种利用WMI得到系统信息的方法。

引用一段百度百科的介绍:

WMI,是Windows 2K/XP管理系统的核心;对于其他的Win32操作系统,WMI是一个有用的插件。WMI以CIMOM为基础,CIMOM即公共信息模型对象管理器(Common Information Model Object Manager),是一个描述操作系统构成单元的对象数据库,为MMC和脚本程序提供了一个访问操作系统构成单元的公共接口。


我们来看代码:

function GetInformation(){
	var locator = new ActiveXObject ("WbemScripting.SWbemLocator");
	var service = locator.ConnectServer(".");
	var properties = service.ExecQuery("select * from Win32_Processor");//CPU 信息
	var value = "";
	var e = new Enumerator (properties);
	for (; !e.atEnd(); e.moveNext()) {
	var p = e.item ();
	 value += p.Name ;
	}
	return value;
}



成功的结果:

 

期间遇到些问题:

期间遇到过“invalid class”或“out of memory”的错误信息

参见这里

http://technet.microsoft.com/zh-cn/library/ff406382.aspx#E4H

  

  x80041010 的错误消息意味着您尝试引用了不存在的 WMI 类。出现此错误的原因通常是:类名称的拼写错误。例如,您尝试连接的是名为 Win32_Services 的类(其末尾有一个 s),而实际的类名为 Win32_Service(其末尾没有 s)。引用了错误的命名空间。脚本编写者时常会连接到 root\cimv2 命名空间,然后尝试访问 StdRegProv 类。遗憾的是,StdRegProv 实际上位于 root\default 命名空间中。尝试访问的是特定操作系统不支持的类。例如,SystemRestore 类(位于 root\default 命名空间中)只在 Windows XP 上受支持。如果您尝试访问该类时它位于(比方说)运行 Windows 2000 的计算机上,则多半会收到“无效类”错误。
    注意:尝试连接到不存在的类时,您收到的错误可能不是 0x80041010,而是错误 0x80041002(“无法找到对象”)或错误 0x80041006(“内存不足”)。

下载 http://technet.microsoft.com/en-US/scriptcenter/dd939957.aspx  使用发现系统没有WMIClass

下载 http://www.piaodown.com/soft/58986.htm 经WMI Explorer检验,只能查到极少的WMI 信息

 

我是Win7 系统,参考以下内容重置 WMI

只有 Windows Server 2003 Service Pack 1 和 Windows XP Service Pack 2 包含用于重新生成 WMI 存储库的内置命令。在其他版本的 Windows 上,可以通过执行以下步骤来重新生成存储库:
1.停止 WMI 服务。(在命令提示符中键入 net stop winmgmt。)
2.重命名文件夹 %windir%\System32\Wbem\Repository。(例如,%windir%\System32\Wbem\Repository_bad。)
3.重命名文件夹后,操作系统将无法再找到 WMI 存储库。
因此,操作系统下次需要访问 WMI 信息时就会自动重新生成该存储库。重新启动 WMI 服务 (net start winmgmt),然后再次尝试运行您的脚本。


解决问题。

获取其他信息可以参见msdn :

http://msdn.microsoft.com/en-us/library/windows/desktop/aa394373(v=vs.85).aspx

 

延展:因为WMI重置前,一直无法正确得到系统信息,调查发现flash也能拿到类似的结果,或许可以解决linux和mac上的探测问题,可参考:

http://www.moock.org/asdg/technotes/echoVersion/

 

 

 

 

 

你可能感兴趣的:(JavaScript,ActiveXObject,wmi)