powershell Get-WinEvent cmdlt: Filtragem por registro de data e hora que não produz resultados desejados?

4

Estou tentando filtrar eventos por meio do Get-WinEvent para obter registros específicos das últimas 24 horas:

$EventLogFilter = @{logname='ForwardedEvents'; id=4771,4625,4768; StartTime=(Get-Date).AddHours(-24)}
$LogonEvents = Get-WinEvent -FilterHashtable $EventLogFilter

O problema é que o Get-WinEvent só retorna 14 eventos, mas existem milhares que atendem a esse critério.

Exemplo:

$EventLogFilter = @{logname='ForwardedEvents'; id=4771,4625,4768; StartTime=(Get-Date).AddHours(-24)}
$LogonEvents = (Get-WinEvent -FilterHashtable $EventLogFilter) 
$LogonEvents.count
14

Agora, se eu remover o filtro StartTime de Get-WinEvent e filtrar com where-object, você poderá ver quantos desses eventos realmente existem:

$EventLogFilter = @{logname='ForwardedEvents'; id=4771,4625,4768}
$LogonEvents = (Get-WinEvent -FilterHashtable $EventLogFilter)
($LogonEvents | ?{$_.TimeCreated -ge (Get-Date).Addhours(-24)}).count
19497

Por isso, perdeu quase 20.000 registros de eventos! O que diabos está acontecendo, estou fazendo algo estúpido, Get-WinEvent está quebrado? Existe um limite para o número de logs que este cmldet pode filtrar antes de surtar e produzir resultados não confiáveis?

    
por red888 25.07.2013 / 17:08

1 resposta

3

Alguém me deu a resposta em outro fórum - FilterXML para o resgate.

O seguinte me deu exatamente o que eu queria com a conveniência adicional de deixar a GUI construir a consulta para mim:

$FilterXML = '<QueryList>
  <Query Id="0" Path="ForwardedEvents">
    <Select Path="ForwardedEvents">*[System[(EventID=4771 or EventID=4625 or EventID=4768) and TimeCreated[timediff(@SystemTime) &lt;= 86400000]]]</Select>
  </Query>
</QueryList>'
$LogonEvents = Get-WinEvent -FilterXml $FilterXML
$LogonEvents | sort -Property TimeCreated | Select-Object -First 1

Fazendo ($ LogonEvents | class -Property TimeCreated | Select-Object -Primeiro 1) Eu pude confirmar que o log mais antigo tinha exatamente 24 horas de idade.

Deveria ter procurado mais nos documentos porque eu não conhecia o evento -filterxml. Eu acho que vou usar isso a partir de agora.

    
por 25.07.2013 / 18:20