Я пытаюсь написать сценарий, который ежечасно собирает журнал безопасности со всех наших контроллеров домена и хранит их удаленно; Я могу собирать журналы безопасности, но есть ли способ собрать журналы безопасности по категориям или номерам событий с DC? дайте мне знать, если возникнут дополнительные вопросы.
Мой код:
$Eventlogs = Get-WmiObject -Class Win32_NTEventLogFile -ComputerName $computer
Foreach($log in $EventLogs)
{
if($Log.LogFileName -eq "Security")
{
$Now = [DateTime]::Now
$FileName = "Security" +"_"+$Now.Month+$Now.Day+$Now.Year+"_"+$Now.Hour+$Now.Minute+$Now.Second
$path = "\\{0}\c$\LogFolder\$folder\$FileName.evt" -f $Computer
$ErrBackup = ($log.BackupEventLog($path)).ReturnValue
if($clear)
{
if($ErrBackup -ne 0)
{
"Backup failed"
"Backup Error was " + $ErrBackup
}
}
}
}
Copy-EventLogsToArchive -path $path -Folder $Folder
}
Дело не в том, что Get-EventLog не получает категорию задач, просто это не поведение командлета по умолчанию для ее отображения. Но данные все еще есть.
Import-Module ActiveDirectory
foreach($server in Get-ADComputer -Filter *)
{
Get-EventLog -LogName Security -ComputerName $server | ? { $_.CategoryNumber -EQ 12544 }
}
Это еще больше усложняется тем фактом, что Категории задач на самом деле имеют числовой формат - Средство просмотра событий использует CategoryMessageFiles для преобразования номеров категорий в названия категорий.
Вы можете найти расположение CategoryMessageFiles в реестре по адресу HKLM\System\CurrentControlSet\services\eventlog\Security\Security
(для каждого журнала событий есть подраздел.)
Причина, по которой это делается таким образом, состоит в том, чтобы облегчить разработчикам создание собственных журналов событий и собственных категорий задач для своих приложений.
Вот некоторая документация для разработчиков о том, как получить строки CategoryMessage, но я знаю, что вы не хотите проходить через все это, поэтому лучше всего было бы просто найти примеры того типа событий, которые вы хотите отфильтровать, выяснить их номера категорий, а затем выполнить Switch($_.CategoryNumber)
на них, чтобы перевести их в любые струны, которые вам нравятся.
Редактировать: Собственно почесать все это. Игнорируйте все, что я только что сказал. Это должно послужить вам намного лучше:
Get-WMIObject -Query "SELECT * FROM Win32_NTLogEvent WHERE LogFile='Security'" | Select EventCode, CategoryString
Извините, что нарушил это, но вы не можете этого сделать (создать резервную копию файла журнала с фильтрами в новый файл журнала событий) из командной строки в Windows Server 2003.
Вы можете экспортировать подмножество событий из журнала событий в файл XML или CSV.
Вы можете использовать Get-EventLog
и отфильтруйте все события по категории задач с помощью Where-Object
. Как уже отмечал Райан, хотя категория задач не является частью вывода по умолчанию, она все еще существует.
Следующий пример только работает на Windows Server 2003 (включая R2) и возвращает все события журнала безопасности в категориях «Вход / выход» и «Доступ к объектам»
Get-EventLog -LogName Security | Where-Object {@("Logon/Logoff","Object Access") -contains $_.Category}
Это легко читать и поддерживать, но работает не очень хорошо, поскольку PowerShell извлекает и сериализует ВСЕ записи журнала событий перед фильтрацией.
Основываясь на примере Райана, давайте вместо этого воспользуемся WQL-фильтром:
$events = Get-WMIObject -Query "SELECT * FROM Win32_NTLogEvent WHERE LogFile='Security' AND (CategoryString = 'Logon/Logoff' OR CategoryString = 'Object Access')"
Чтобы сохранить отфильтрованные события в файл, вы можете экспортировать их как строки в файл CSV:
$events | Export-Csv C:\myEvents.csv -NoTypeInformation
или (если у вас нет проблем со сжатием резервной копии, но вы хотите сохранить форматирование сообщения) используйте командлет Export-CliXML, чтобы вывести его в XML:
$events | Export-CliXML C:\myEvents.xml
Затем вы можете импортировать их в командную строку, когда вам понадобится искать их в будущем:
$events = Import-CliXML C:\myEvents.xml
Выходные данные XML сериализованы и требуют много места для хранения, но поскольку события журнала безопасности в основном заполнены пробелами, дисковое пространство легко освободить, заархивировав файлы. Я получаю степень сжатия около 98% с обычной zip-папкой из XML-файла, содержащего прибл. 200000 событий безопасности.
Возможно, вы сможете добиться еще лучшего сжатия с помощью 7-молния