Análisis rápido de los registros de eventos de Windows

Prefacio

Realizo inspecciones del sistema para varios clientes cada mes, y la inspección del registro de eventos de Windows es una tarea que requiere mucho tiempo. Registrará mucha información, especialmente para pistas importantes con respecto a la seguridad del sistema y la resolución de problemas del sistema. Podemos usar algunas palabras clave e información de eventos para crear varios scripts para filtrar y filtrar registros rápidamente.

En términos generales, podemos implementar el filtrado de registros de las siguientes dos formas:

  • Powershell => La herramienta de línea de comandos que viene con Win
  • Log Parser 2.2 => una herramienta de terceros muy poderosa

Método de comando de PowerShell

Windows PowerShell proporciona dos modos de comando diferentes:

  • Get-WinEvent => potente, pero complicado de usar;

  • Get-EventLog => Consulta en tiempo real simple y fácil de usar;

# 过滤安全日志的登录成功与失败日志
Get-EventLog Security  -InstanceId  4624,4625

Inserte la descripción de la imagen aquí

Comandos de uso común de PowerShell

1. Verifique la hora de encendido reciente del servidor

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

Inserte la descripción de la imagen aquí

2. Detalles de errores de inicio de sesión recientes

$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++
}

La referencia del tipo de inicio de sesión es la siguiente:
Inserte la descripción de la imagen aquí

3. Cuente el número de eventos hasta el tiempo especificado

# 汇总显示
Get-EventLog security -InstanceId 4624,4625  -After '2020/06/01 00:00' | Group-Object InstanceId | Sort-Object Count -Descending

Inserte la descripción de la imagen aquí

# 明细显示
Get-EventLog security -InstanceId 4625  -After '2020/06/01 00:00' | Format-List 

Inserte la descripción de la imagen aquí

4. Céntrese solo en un determinado tipo de registro en un momento específico

Get-EventLog application -After '2020/06/01 00:00' | Where-Object {
    
     $_.EntryType -eq "Error" }

Inserte la descripción de la imagen aquí

Explicación común de EventID

Inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/weixin_38623994/article/details/106580181
Recomendado
Clasificación