Windows事件日誌快速分析

前言

我每月都要給各種不同的客戶做系統巡檢,其中Windows事件日誌檢查是比較耗時的事情。它會記錄許多的信息,特別是針對系統安全方面、系統故障排除方面有重要線索。我們可以通過一些事件關鍵字與信息,製作各種不同的腳本以便快速篩選過濾日誌。

一般來說,我們可以通過如下兩種方法實現日誌過濾:

  • Powershell => Win自帶的命令行工具
  • Log Parser 2.2 => 功能非常強大的第三方工具

PowerShell命令方法

Windows PowerShell提供兩種不同的命令方式:

  • Get-WinEvent => 功能強大,但運用複雜;

  • Get-EventLog => 簡單易用,可實時查詢;

# 過濾安全日誌的登錄成功與失敗日誌
Get-EventLog Security  -InstanceId  4624,4625

在這裏插入圖片描述

PowerShell常用命令

1. 檢查服務器最近開關機時間

Function Get-ComputerUptimeHistory {
 $q='
<QueryList>
  <Query Id="0" Path="System">
    <Select Path="System">*[System[(EventID=6005 or EventID=6006)]]</Select>
  </Query>
</QueryList>'
$events = Get-WinEvent -FilterXml $q
$i=-1
while ( $i+1 -lt $events.length ) {
 if($i -eq -1)
 {
  [PSCustomObject]@{
  StartTime = $events[0].TimeCreated;
  StopTime = $null ;
  UpTime = [datetime]::Now - $events[0].TimeCreated
  }
 }
 else{
 [PSCustomObject]@{
  StartTime = $events[$i+1].TimeCreated;
  StopTime = $events[$i].TimeCreated ;
  UpTime = $events[$i].TimeCreated - $events[$i+1].TimeCreated
  }
 }
 $i += 2
}
}

Get-ComputerUptimeHistory | ft -AutoSize

在這裏插入圖片描述

2. 最近登錄失敗的詳細信息

$xml='<QueryList>
  <Query Id="0" Path="Security">
    <Select Path="Security">*[System[(EventID=4625)]]</Select>
  </Query>
</QueryList>'
$events = Get-WinEvent -FilterXml $xml
$i=0
Write-Host '登錄時間','登錄賬號','登錄類型','登錄IP地址'
while ($i -lt $events.length) {
    $time=$events[$i].TimeCreated
    $type=[regex]::matches($events[$i].Message, '登錄類型:(.+)') | %{$_.Groups[1].Value.Trim()}
    $user=([regex]::matches($events[$i].Message, '帳戶名:(.+)') | %{$_.Groups[1].Value.Trim()})[1]
    $IP=[regex]::matches($events[$i].Message, '源網絡地址:(.+)') | %{$_.Groups[1].Value.Trim()}
    Write-Host $time,$user,$type,$IP
    $i++
}

登錄類型參考如下:
在這裏插入圖片描述

常見EventID解釋

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章