
내 답변에 대한 댓글에서이 질문, cop1152는 WMI 스크립트를 좋아한다고 말했습니다. 글쎄, 나도 마찬가지야!
커뮤니티와 공유하고 싶은 가장 좋아하고, 가장 좋고, 가장 유용한 스크립트는 무엇입니까?
감사해요.
답변1
나는 많은 WMIC 조각을 모았습니다.여기.
답변2
서버에 RDPd하고 이벤트 뷰어를 열어 오류가 있는지 살펴보는 동료를 돕기 위해 제가 쓴 것입니다. 그런 다음 다른 3개 서버에 대해 매일 반복합니다.
'
' WMI script to read all eventlog errors generated since last time this script was run.
' This script reads a datetime value from a file (EventView_date.txt) and uses it to
' construct a WMI query for all windows EventLog entries since then that are of type
' Error or error (seems winxp writes with a lowercase e)
'
' These results are written to a file (EventView_<dts>.log) and the time the script was
' run is written to the date file. This allows this script to be run several times a day
' and will only retrieve the error entries since the last run.
'
' If the date file is not present a new one will be created with the current date/time.
'
'
' Usage: click the vbs file in Windows Explorer to run using wscript. Some information
' will be displayed in message boxes (start time, each computer, number of records found)
' Alternatively type "cscript EventLogErrorView.vbs" in a command prompt to show the
' same details written to the command prompt. This can be used in a batch file, or in
' a scheduled task - the command is cscript, the parameter is this vbs file.
'
'
'
On Error Resume Next
'
' update this to refelect the computers to monitor - comma separated for multiple
'
arrComputers = Array("server1", "server2")
Const wbemFlagReturnImmediately = &h10
Const wbemFlagForwardOnly = &h20
Set objFSO = CreateObject("Scripting.FileSystemObject")
today = ""
Set objDateFile = objFSO.OpenTextFile ("EventView_date.txt")
today = objDateFile.Readline
Wscript.echo "today = " & today
if (isempty(today)) then
WScript.Echo "Date file not found, using today's date at midnight"
today = Date & " 00:00:00"
end if
today = DateToWMIDateString(today)
' write current datetime to file for next run.
set objDateFile = objFSO.CreateTextFile("EventView_date.txt")
objDateFile.WriteLine(Date & " " & Time)
Set objFile = objFSO.CreateTextFile("EventView_" & today & ".log")
' start processing
WScript.Echo "Processing All Error reports since: " & today & " (" & WMIDateStringToDate(today) & ")"
objFile.WriteLine "Processing All Error reports since: " & today & " (" & WMIDateStringToDate(today) & ")"
For Each strComputer In arrComputers
objFile.WriteLine
objFile.WriteLine
objFile.WriteLine
objFile.WriteLine "=========================================="
objFile.WriteLine "Computer: " & strComputer
objFile.WriteLine "=========================================="
WScript.Echo "Computer: " & strComputer
' notes:
' timestamp comparisons in WMI queries are in the form YYYYMMDDHHMMSS.milliseconds+exp
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")
Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_NTLogEvent WHERE (Type = 'error' OR Type= 'Error') AND TimeGenerated > '" & today & ".000000+000'", "WQL", _
wbemFlagReturnImmediately + wbemFlagForwardOnly)
dim records
records = 0
For Each objItem In colItems
objFile.WriteLine "CategoryString: " & objItem.CategoryString
objFile.WriteLine "ComputerName: " & objItem.ComputerName
strData = Join(objItem.Data, ",")
objFile.WriteLine "Data: " & strData
objFile.WriteLine "EventCode: " & objItem.EventCode
objFile.WriteLine "EventIdentifier: " & objItem.EventIdentifier
objFile.WriteLine "EventType: " & objItem.EventType
strInsertionStrings = Join(objItem.InsertionStrings, ",")
objFile.WriteLine "InsertionStrings: " & strInsertionStrings
objFile.WriteLine "Logfile: " & objItem.Logfile
objFile.WriteLine "Message: " & objItem.Message
objFile.WriteLine "SourceName: " & objItem.SourceName
objFile.WriteLine "TimeGenerated: " & WMIDateStringToDate(objItem.TimeGenerated)
objFile.WriteLine "Type: " & objItem.Type
objFile.WriteLine "User: " & objItem.User
objFile.WriteLine
objFile.WriteLine "------------------------------------------"
objFile.WriteLine
records = records + 1
Next
WScript.Echo " " & records & " records found"
objFile.WriteLine " " & records & " records found"
Next
Function WMIDateStringToDate(dtmDate)
WMIDateStringToDate = CDate(Mid(dtmDate, 5, 2) & "/" & _
Mid(dtmDate, 7, 2) & "/" & Left(dtmDate, 4) _
& " " & Mid (dtmDate, 9, 2) & ":" & Mid(dtmDate, 11, 2) & ":" & Mid(dtmDate,13, 2))
End Function
' takes a dd/mm/yyyy hh:mm:ss format and turns it into yyyymmddhhmmss
Function DateToWMIDateString(dtmDate)
DateToWMIDateString = Year(dtmDate) & PadZeros(Month(dtmDate)) & PadZeros(Day(dtmDate)) & PadZeros(Hour(dtmDate)) & PadZeros(Minute(dtmDate)) & PadZeros(Second(dtmDate))
End Function
Function PadZeros(dtmDate)
If Len(dtmDate) = 1 Then
PadZeros = "0" & dtmDate
Else
PadZeros = dtmDate
End If
End Function
답변3
Microsoft의 (무료) 도구 Scriptomatic2의 모든 것!
답변4
스크립트는 유용하며 나는 이것을 실행할 수 있습니다. 하지만 파일에는 다음과 같은 정보만 표시됩니다.
========================================== 데이터: 삽입 문자열:
1 records found
또한("EventView_" & today & ".log") 이 파일은 실제 날짜가 아닌 EventView_00.log로 파일을 생성하는 것입니다. 구문에 따라 off )00 대신 데이터를 제공해야 합니다.