我想创建VBScript
代码以从 Windows 事件查看器中检索特定的错误类型日志,将它们保存在.txt
文件中,然后通过 FTP 传输或直接复制。
我怎样才能做到这一点?
我一直在阅读并偶然发现了这些页面:
主要问题,Eventquery.vbs 信息和复制文件到远程计算机。
但我只是不明白如何将这个过程作为一个整体。
我想创建VBScript
代码以从 Windows 事件查看器中检索特定的错误类型日志,将它们保存在.txt
文件中,然后通过 FTP 传输或直接复制。
我怎样才能做到这一点?
我一直在阅读并偶然发现了这些页面:
主要问题,Eventquery.vbs 信息和复制文件到远程计算机。
但我只是不明白如何将这个过程作为一个整体。
您可以使用 WMI 查询来查询事件日志。这是有关特定类的信息。
在不确切知道您要查找的内容的情况下,假设您想要搜索应用程序事件日志并记录任何事件 id 1003。我使用 On Error Resume Next 作为快速修复,因此如果字段没有出错,它不会出错包含数据。
On Error Resume Next
LOG_FILE = "temp.txt"
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * from Win32_NTLogEvent WHERE LogFile='Application'")
For Each objEvent in colItems
If objEvent.EventCode = 1003 Then
writeLog "Category: " & objEvent.Category
writeLog "Category String: " & objEvent.CategoryString
writeLog "Computer Name: " & objEvent.ComputerName
writeLog "Data: " & objEvent.Data
writeLog "Event Code: " & objEvent.EventCode
writeLog "Event Identifier: " & objEvent.EventIdentifier
writeLog "Insertion Strings: " & objEvent.InsertionStrings
writeLog "Logfile: " & objEvent.Logfile
writeLog "Message: " & objEvent.Message
writeLog "Record Number: " & objEvent.RecordNumber
writeLog "Source Name: " & objEvent.SourceName
writeLog "Time Generated: " & objEvent.TimeGenerated
writeLog "Time Written: " & objEvent.TimeWritten
writeLog "Type: " & objEvent.Type
writeLog "User: " & objEvent.User
writeLog ""
End If
Next
Sub writeLog(strText)
Dim objFSO, objLogFile
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objLogFile = objFSO.OpenTextFile(LOG_FILE, 8, True)
objLogFile.WriteLine strText
objLogFile.Close
Set objLogFile = Nothing
Set objFSO = Nothing
End Sub
您可以通过启动 power shell 轻松完成此操作。
在 powershell 中过滤事件日志以查找错误的一种简单方法是
Get-EventLog -LogName APPLICATION -EntryType Error
如果需要,您可以轻松地将其作为批处理脚本或 vbscript 的一部分。
要将其重定向到文本文件,可以使用以下命令:
Get-EventLog -LogName APPLICATION -EntryType Error > Result.txt
然后,您需要将文本文件上传到 FTP
在事件查看器中,您可以转到左侧的自定义视图、管理事件。它具有来自 72 个不同日志的严重、错误和警告(级别 1、2 和 3)事件(Windows api 有 256 个日志名查询限制)。我认为这些是最重要的日志。您可以单击右侧的“将自定义视图中的所有事件另存为...”,然后选择您的格式:evtx、xml、txt 或 csv。我的电脑上有大约 4000 个事件。
如果您愿意深入研究 powershell,则可以使用 foreach 循环搜索所有日志中的错误。“-ea 0”是“-erroraction silentlycontinue”的缩写。
$a = get-winevent -listlog * | foreach { get-winevent @{
logname = $_.logname;
starttime = '5/2/2020 12:53 pm'; level = 1,2,3 } -ea 0 } |
where message -match 'whatever'
$a.count
67
$a | export-csv file.csv
这条线
对于每个 objEventin colItems
必须像这样为 colItems 中的每个 objEvent 更正