Directorio de artículos
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
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
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:
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
# 明细显示
Get-EventLog security -InstanceId 4625 -After '2020/06/01 00:00' | Format-List
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" }