Option Explicit
Dim FSO, oFile
Dim objWMIService, objProcess, objPerfOS, objNetworkInterface, objRefresher
Dim colProcess, colPerfOS, colPerfNetworkInterface
Dim strComputer, strFileName, strCpuPercent, strProcess
Dim strProcessName, strProcessNameForPerf
Dim strDate, strTime
Dim DateEnd, Timelimit
'프로세스 이름(.exe는 제거한다.)
strProcessNameForPerf = "explorer"
strProcessName = strProcessNameForPerf & ".exe"
'Log 남길 시간 설정
' "y" 년
' "m" 월
' "d" 일
' "w" 주
' "h" 시
' "n" 분
' "s" 초
Timelimit = 1
DateEnd = DateAdd("n", Timelimit, Now)
'strFileName = Inputbox("c:\ProcessPerformanceLog.txt","Process Performance","ProcessPerformanceLog.txt")
strFileName = strProcessNameForPerf & "_" & "ProcessPerformanceLog.txt"
'시스템 Object 생성
Set FSO = CreateObject("Scripting.FileSystemObject")
Set oFile = FSO.CreateTextFile(strFileName, True)
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")
'새로고침 Object 생성
Set objRefresher = CreateObject("WbemScripting.SWbemRefresher")
Set colPerfOS = objRefresher.AddEnum(objWMIService, "Win32_PerfFormattedData_PerfProc_Process").objectSet
Set colPerfNetworkInterface = objRefresher.AddEnum(objWMIService, "Win32_PerfFormattedData_Tcpip_NetworkInterface").objectSet
Set colProcess = objRefresher.AddEnum(objWMIService, "Win32_Process").objectSet
objRefresher.Refresh
Wscript.Sleep 1000
'Header 정보 Log 파일에 출력
oFile.Write("Date" & vbTab & "Time" & vbTab & "Process Name" & vbTab & "CPU Usage" & vbTab & "Memory Usage" & vbTab & "Peak Memory Usage" & vbTab & "PageFile Usage" & vbTab & "Peak PageFile Usage" & vbTab & "Network KBytesSendPerSec" & vbTab & "Network KBytesRecvPerSec")
While( Now < DateEnd )
'시스템 정보 Refresh
objRefresher.Refresh
'네트워크 트래픽 보기 - 모든 네트워크 어댑터에서 중에서 송/수신량이 가장 많은 어댑터의 트래픽을 기록한다.
Dim nBytesSentPerSec : nBytesSentPerSec = 0
Dim nBytesReceivedPerSec : nBytesReceivedPerSec = 0
For Each objNetworkInterface in colPerfNetworkInterface
If ( nBytesSentPerSec < objNetworkInterface.BytesSentPerSec ) Then
nBytesSentPerSec = objNetworkInterface.BytesSentPerSec
End If
If ( nBytesReceivedPerSec < objNetworkInterface.BytesReceivedPerSec ) Then
nBytesReceivedPerSec = objNetworkInterface.BytesReceivedPerSec
End If
Next
'CPU 사용량 보기
For Each objPerfOS in colPerfOS
If ( strProcessNameForPerf = objPerfOS.Name ) Then
strCpuPercent = objPerfOS.PercentProcessorTime
End If
Next
'프로세스 메모리 보기
For Each objProcess in colProcess
If ( strProcessName = objProcess.Name ) Then
GetDate strDate
GetTime strTime
strProcess = vbNewLine & strDate & vbTab & strTime & vbTab & objProcess.Name & vbTab & strCpuPercent & vbTab & objProcess.WorkingSetSize/1024 & "KB" & vbTab & objProcess.PeakWorkingSetSize/1024 & "KB" & vbTab & objProcess.PageFileUsage/1024 & "KB" & vbTab & objProcess.PeakPageFileUsage/1024 & "KB" & vbTab & int(nBytesSentPerSec/1024) & "KB" & vbTab & int(nBytesReceivedPerSec/1024) & "KB"
End If
Next
'Log 파일에 저장
oFile.Write(strProcess)
'10초마다 한번씩 로그를 남긴다.
Wscript.Sleep 10000
WEnd
oFile.Write( vbNewLine & "End of Log" )
oFile.Close
WScript.Quit
'Sub 함수들
Sub GetTime( strTime )
Dim strHour, strMinute, strSecond
'-- Hour 2자리로 변경
strHour = Hour(Now)
If Len(strHour) < 2 Then
strHour = "0" & strHour
End If
'-- Minute 2자리로 변경
strMinute = Minute(Now)
If Len(strMinute) < 2 Then
strMinute = "0" & strMinute
End If
'-- Second
strSecond = Second(Now)
If Len(strSecond) < 2 Then
strSecond = "0" & strSecond
End If
'-- 전체 시간
strTime = strHour & ":" & strMinute & ":" & strSecond
End Sub
Sub GetDate( strDate )
Dim strDay, strMonth, strYear
'-- Day 2자리로 변경
strDay = Day(Now)
If Len(strDay) < 2 Then
strDay = "0" & strDay
End If
'-- Month 2자리로 변경
strMonth = Month(Now)
If Len(strMonth) < 2 Then
strMonth = "0" & strMonth
End If
'-- Year
strYear = Year(Now)
'-- 전체 날짜 구하기
strDate = strYear & "-" & strMonth & "-" & strDay
End Sub





2008/05/28
ProcessPerformanceLog.vbs








블로그 이전 ..












