WMI使用技巧集(2)

2021-06-15 21:12:32 字數 4919 閱讀 1514

13、 一些技巧

我使用wmi可以取出網絡卡的mac位址,cpu的系列號,主機板的系列號,其中主機板的系列號已經核對過沒有錯的,其餘的有待於驗證,因為我使用的是筆記本,筆記本背面有乙個主機板的系列號,所以可以肯定主機板系列號沒有問題

網絡卡的mac位址

select macaddress from win32_networkadapter where ((macaddress is not null) and (manufacturer <> 'microsoft'))

結果:08:00:46:63:ff:8c

cpu的系列號

select processorid from win32_processor

結果:3febf9ff00000f24

主機板的系列號

select serialnumber from win32_bios

結果:28362630-3700521

獲取硬碟id

string hdid;

managementclass cimobject = new managementclass("win32_diskdrive");

managementobjectcollection moc = cimobject.getinstances();

foreach(managementobject mo in moc)

14、 乙個使用wmi後的異常處理的問題

下面是我整理的一段**.

managementobjectcollection querycollection1;

connectionoptions co = new connectionoptions();

co.username = "administrator";

co.password = "111";

try;

mo.invokemethod("reboot",ss);

console.writeline(mo.tostring());}}

catch(exception ee)

15、windows 管理規範 (wmi) 是可伸縮的系統管理結構,它採用乙個統一的、基於標準的、可擴充套件的物件導向介面。wmi 為您提供與系統管理資訊和基礎 wmi api 互動的標準方法。wmi 主要由系統管理應用程式開發人員和管理員用來訪問和作業系統管理資訊。

wmi 可用於生成組織和管理系統資訊的工具,使管理員或系統管理人員能夠更密切地監視系統活動。例如,可以使用 wmi 開發乙個應用程式,用於在 web 伺服器崩潰時呼叫管理員。

將 wmi 與 .net 框架一起使用

wmi 提供了大量的規範以便為許多高階應用程式(例如,microsoft exchange、microsoft sql server 和 microsoft internet 資訊服務 (iis))實現幾乎任何管理任務。管理員可以執行下列任務: 

" 監視應用程式的執行狀況。 

" 檢測瓶頸或故障。 

" 管理和配置應用程式。 

" 查詢應用程式資料(使用物件關係的遍歷和查詢)。 

" 執行無縫的本地或遠端管理操作。 

wmi 結構由以下三層組成: 

" 客戶端 

使用 wmi 執行操作(例如,讀取管理詳細資訊、配置系統和預訂事件)的軟體元件。 

" 物件管理器 

提供程式與客戶端之間的中間裝置,它提供一些關鍵服務,如標準事件發布和預訂、事件篩選、查詢引擎等。 

" 提供程式 

軟體元件,它們捕獲實時資料並將其返回到客戶端應用程式,處理來自客戶端的方法呼叫並將客戶端鏈結到所管理的基礎結構。 

通過定義完善的架構向客戶端和應用程式無縫地提供了資料和事件以及配置系統的能力。在 .net 框架中,system.management 命名空間提供了用於遍歷 wmi 架構的公共類。

用 system.management 訪問管理資訊

system.management 命名空間是 .net 框架中的 wmi 命名空間。此命名空間包括下列支援 wmi 操作的第一級類物件: 

" managementobject 或 managementclass:分別為單個管理物件或類。 

" managementobjectsearcher:用於根據指定的查詢或列舉檢索 managementobject 或 managementclass 物件的集合。 

" managementeventwatcher:用於預訂來自 wmi 的事件通知。 

" managementquery:用作所有查詢類的基礎。 

system.management 類的使用編碼範例對 .net 框架環境很適合,並且 wmi 在任何適當的時候均使用標準基框架。例如,wmi 廣泛利用 .net 集合類並使用推薦的編碼模式,如 .net 非同步操作的「委託」模式。因此,使用 .net 框架的開發人員可以使用他們的當前技能訪問有關計算機或應用程式的管理資訊。

請參見使用 wmi 管理應用程式 | 檢索管理物件的集合 | 查詢管理資訊 | 預訂和使用管理事件 | 執行管理物件的方法 | 遠端處理和連線選項 | 使用強型別物件

獲取cpu序列號**

string cpuinfo = "";//cpu序列號

managementclass cimobject = new managementclass("win32_processor");

managementobjectcollection moc = cimobject.getinstances();

foreach(managementobject mo in moc)

獲取網絡卡硬體位址

using system.management;

...managementclass mc = new managementclass("win32_networkadapterconfiguration");

managementobjectcollection moc = mc.getinstances();

foreach(managementobject mo in moc)

", mo["macaddress"].tostring());

mo.dispose();}}

獲取硬碟id

string hdid;

managementclass cimobject = new managementclass("win32_diskdrive");

managementobjectcollection moc = cimobject.getinstances();

foreach(managementobject mo in moc)

16、在.net中輕鬆獲取系統資訊(1) -wmi篇

montaque

申明:1、個人的一點心得,僅供參考

概述:不知道大家有沒有這種體會?有時候為了獲取系統一點點資訊,比如考慮一下作業系統的版本號,或者當前螢幕的解析度。其實說到底就是讀作業系統某個方面的乙個屬性值而已,然後就看到我們的程式中密密麻麻的win32 api申明,呼叫,**的可讀性和維護性不言而喻。到了.net,微軟提供了更為豐富的類,有很多以前要呼叫api的方法可以在.net中輕而易舉的呼叫實現。今天簡單介紹乙個在.net中如何通過與wmi(windows 管理規範)的通訊,從而得到獲取資訊的目的。

主要思路:

正文:wmi(windows管理規範:windows management instrumentation)是microsoft基於web的企業管理(wbem)的實現,同時也是一種基於標準的系統管理介面。wmi最早出現在microsoft windows 2000系統上,但它同樣可以安裝在windows nt 4和windows 9x計算機上。wmi是一種輕鬆獲取系統資訊的強大工具。

在.net中,有乙個system.management名空間(系統預設沒有引用,我們可以手動新增引用),通過下面的class的操作,可以查詢系統軟硬體的資訊,先看乙個簡單的例子:

imports system.management

dim searcher as new managementobjectsearcher("select * from win32_share")

dim share as managementobject

for each share in searcher.get()

messagebox.show(share.gettext(textformat.mof))

next share

執行的結果是列出了所有系統當前共享的目錄、以及描述等等。

分析一下上面的**,可以看到一下幾點:

1、似乎是在進行資料庫操作,有點像sql語句。其實就是sql操作,這種語句被成wql(wmi query language),實際上是標準sql的乙個子集加上了wmi的擴充套件.

2、wql是個唯讀的查詢語言,我們只能查詢響應的資料,不能用update,insert等更新操作

3、**很簡單、通俗易懂

4、我們採用了一種mof(託管物件格式)的顯示。

例子二:獲取當前主機板的資訊

上面的例子是乙個軟體方面的資訊,下面看乙個獲取硬體資訊的例子,獲取主機板的序列號以及製造商:

dim searcher as new managementobjectsearcher("select * from win32_baseboard")

dim share as managementobject

for each share in searcher.get()

debug.writeline("主機板製造商:" & share("manufacturer"))

debug.writeline("型號:" & share("product"))

debug.writeline("序列號:" & share("serialnumber"))

next share

總結以及補充:

wmi類也是分層次的,具體可以參考msdn中的wmi;轉向.net平台開發的時候,最好能多看一些關於.net新特性的介紹,這樣可以大幅度的提公升**的開發效率以及執行效率。

WMI使用集錦

1.wmi簡介 wmi是英文windows management instrumentation的簡寫,它的功能主要是 訪問本地主機的一些資訊和服務,可以管理遠端計算機 當然你必須要擁有足夠的許可權 比如 重啟,關機,關閉程序,建立程序等。2.使用時首先新增system.management.dll...

CMake使用技巧集

1 注意cmake不允許出現相同的目標名稱,即使是不同的目錄下的cmakelists.txt include directories before tmp 當使用cmake的include復用規則時,如果想讓某標頭檔案路徑至於其它的前面,則需要指定before,否則 tmp將位於其它的後面。類似be...

CMake使用技巧集

1 注意cmake不允許出現相同的目標名稱,即使是不同的目錄下的cmakelists.txt include directories before tmp 當使用cmake的include復用規則時,如果想讓某標頭檔案路徑至於其它的前面,則需要指定before,否則 tmp將位於其它的後面。類似be...