Não é que Get-EventLog não receba a Categoria de Tarefa, é apenas que não é o comportamento padrão do Cmdlet para exibi-la. Mas os dados ainda estão lá.
Import-Module ActiveDirectory
foreach($server in Get-ADComputer -Filter *)
{
Get-EventLog -LogName Security -ComputerName $server | ? { $_.CategoryNumber -EQ 12544 }
}
Isso é ainda mais complicado pelo fato de que as Categorias de Tarefas estão, na verdade, em formato numérico - O Visualizador de Eventos usa CategoryMessageFiles para traduzir os números de categoria em nomes de categoria.
Você pode encontrar o local dos CategoryMessageFiles no registro, em HKLM\System\CurrentControlSet\services\eventlog\Security\Security
(há uma subchave para cada log de eventos.)
O motivo pelo qual isso é feito é facilitar para os desenvolvedores criar seus próprios logs de eventos e suas próprias categorias de tarefas para seus próprios aplicativos.
Aqui está uma documentação do desenvolvedor sobre como obter strings CategoryMessage , mas eu sei você não quer passar por tudo isso, então a próxima melhor coisa seria encontrar exemplos do tipo de evento que você deseja filtrar, descobrir seus números de categoria e, em seguida, fazer um Switch($_.CategoryNumber)
para eles traduza-os para o que você quiser.
Editar: Na verdade, risque tudo isso. Ignore tudo o que acabei de dizer. Isso deve servir muito melhor para você:
Get-WMIObject -Query "SELECT * FROM Win32_NTLogEvent WHERE LogFile='Security'" | Select EventCode, CategoryString