利用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/

相關文章
相關標籤/搜索