다음을 통해 공유


WMI 작업: 성능 모니터링

성능 카운터에서 데이터를 가져오는 WMI 클래스를 사용하여 컴퓨터 성능에 대한 데이터에 액세스하고 이를 새로 고칩니다. 다른 예제는 TechNet ScriptCenter(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'") 

While (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