共用方式為


WMI 工作:效能監視

使用從性能計數器取得數據的 WMI 類別,以存取和重新整理電腦效能的相關數據。 如需其他範例,請參閱techNet ScriptCenter at https://www.microsoft.com/technet。 如需詳細資訊,請參閱 效能連結庫和 WMI監視效能資料

本主題中顯示的腳本範例只會從本機計算機取得數據。 如需了解如何使用腳本從遠端電腦取得資料的詳細資訊,請參閱 如何在遠端電腦上連線到 WMI

下列程式描述如何執行腳本。

執行腳本

  1. 複製程序代碼,並將它儲存在擴展名為 .vbs 的檔案中,例如 filename.vbs。 請確定文字編輯器不會將 .txt 擴展名新增至檔案。
  2. 開啟命令提示字元視窗,並瀏覽至您儲存檔案的目錄。
  3. 在命令提示字元中輸入 cscript filename.vbs
  4. 如果您無法存取事件記錄檔,請檢查您是否正在從提高許可權的命令提示字元執行。 某些事件記錄檔,例如安全性事件記錄檔,可能會受到使用者訪問控制 (UAC) 的保護。

注意

根據預設,cscript 會在命令提示字元視窗中顯示文稿的輸出。 由於 WMI 命令稿可能會產生大量的輸出,因此您可能會想要將輸出重新導向至檔案。 在命令提示字元中輸入 cscript filename.vbs > outfile.txt,將 filename.vbs 的輸出重新導向至 outfile.txt

下表列出可用來從本機計算機取得各種數據類型的腳本範例。

如何... WMI 類別或方法
...取得可在腳本中的 Perfmon 公用程式中看到的性能計數器數據? 使用名稱開頭為 「Win32_PerfFormattedData」 的類別,例如 Win32_PerfFormattedData_PerfProc_Process。 具有 PageFileBytes 名稱的屬性會對應至您在 Perfmon 中看到的性能計數器。 “Win32_PerfFormattedData” 類別會為您計算計數器的最終值。
...取得單一程序、磁碟機及其他資料的持續效能數據? 使用 Win32_PerfFormattedData_PerfProc_Process 或正確格式化的 性能計數器類別SWbemObjectEx.Refresh_ 方法。 如需詳細資訊,請參閱 使用 SWbemObject 撰寫腳本
在 C++ 中,使用 IWbemConfigureRefresher::AddObjectByPathIWbemRefresher::Refresh。 如需詳細資訊,請參閱 監視效能資料
下列腳本會執行,直到計算機重新啟動、WMI 停止或腳本停止為止。 若要手動停止文稿,請使用任務管理器來停止進程。 若要以程式設計方式停止,請使用 Win32_Process 類別中的 Terminate 方法。

VB
              
              strComputer = “.”Set objWMIService = GetObject(“winmgmts:” _ & “{impersonationLevel=impersonate}!\\” _ & strComputer & “\root\cimv2”) set PerfProcess = objWMIService.Get(_ “Win32_PerfFormattedData_PerfProc_Process.Name='Idle'”)

當 (True) PerfProcess.Refresh_
Wscript.Echo PerfProcess.PercentProcessorTime Wscript.Sleep 1000 Wend

...取得所有進程的持續效能數據,而不重複輪詢?

使用名稱以「Win32_PerfFormattedData」開頭的類別和 SWbemRefresher 物件。 重新整理器會保留 物件,因此您不需要重複取得集合。 計算效能數據至少需要兩個值,因為大多數計數器都是速率計數器。 第一次顯示刷新後的數據時,它是空的。

下列腳本會無限期執行,直到計算機重新啟動、WMI 停止或腳本停止為止。 若要手動停止文稿,請使用任務管理器來停止進程。 若要以程式設計方式停止,請使用 Win32_Process 類別中的 Terminate 方法。

VB
              
              strComputer = “.” Set objWMIService = GetObject(“winmgmts:” _ & “{impersonationLevel=impersonate}!\\” _ & strComputer & “\root\cimv2”) set objRefresher = CreateObject(“WbemScripting.Swbemrefresher”) Set objProcessor = objRefresher.AddEnum _ (objWMIService, _ “Win32_PerfFormattedData_PerfOS_Processor”)。ObjectSet

While (True) objRefresher.Refresh For each RefreshItem in objRefresher For each objProcess in RefreshItem.ObjectSet Wscript.Echo objProcess.GetObjectText_ Next Next Wscript.Sleep 5000 Wend

如何取得和計算 Windows 2000 上程式的效能資料?

使用 「Win32_PerfRawData」 類別,例如 Win32_PerfRawData_PerfProc_Process。 獲取屬性資料,例如 PercentProcessorTime,並重複兩次針對特定進程。 請查閱在 CounterType 限定符中指定的公式,然後進行計算。 範例中的 CounterType 的識別符號為 PERF_100NSEC_TIMER_INV。 如需詳細資訊,請參閱 監視效能資料

下列腳本會無限期執行,直到計算機重新啟動、WMI 停止或腳本停止為止。 若要手動停止文稿,請使用任務管理器來停止進程。 若要以程式設計方式停止,請使用 Win32_Process 類別中的 Terminate 方法。

VB
              
              strComputer = “.” Set objWMIService = GetObject(“winmgmts:” _ & “{impersonationLevel=impersonate}!\\" _ & strComputer & “\root\cimv2”)

While (True) Set object1 = objWMIService.Get( _ "Win32_PerfRawData_PerfOS_Processor.Name='_Total'") N1 = object1.PercentProcessorTime D1 = object1.TimeStamp_Sys100NS Wscript.Sleep(1000) set object2 = objWMIService.Get( _ "Win32_PerfRawData_PerfOS_Processor.Name='_Total'") N2 = object2.PercentProcessorTime D2 = object2.TimeStamp_Sys100NS ' CounterType - PERF_100NSEC_TIMER_INV ' Formula - (1- ((N2 - N1) / (D2 - D1))) x 100 PercentProcessorTime = (1 - ((N2 - N1)/(D2-D1)))*100 Wscript.Echo "% Processor Time=" , PercentProcessorTime Wend

文稿和應用程式的 WMI 工作

WMI C++應用程式範例

TechNet ScriptCenter 技術網絡腳本中心