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

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

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

如今咱们尝试一种利用WMI获得系统信息的方法。 数据库

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

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”的错误信息 code

参见这里 orm

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

    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/

相关文章
相关标签/搜索