Я написал сценарий для удаленного получения журналов событий в PowerShell, но мне не нравится, как этот сценарий создает собственные записи в журнале событий.
В частности, этот сценарий захватывает несколько типов идентификаторов событий, включая события входа/выхода из системы. Недавно меня попросили запустить скрипт для получения событий для другого пользователя, и мне пришлось получить эти данные за несколько часов. Обычно я запускаю скрипт и позволяю ему работать большую часть дня (потому что здесь обычно МНОГО данных), но на этот раз, чтобы ускорить процесс, я запустил 4 экземпляра скрипта, чтобы получить эти данные быстрее, чем обычный. Каждый экземпляр сценария просматривал разные временные рамки, так что все 4 объединенных сценария загружались в те временные рамки, о которых меня просили.
В течение 3 часов или около того у меня было более миллиона различных попыток входа в систему для моего идентификатора пользователя на этом удаленном компьютере. У меня было так много входов в систему, что в итоге я перезаписал данные журнала событий, которые меня изначально просили получить.
Извлеченные уроки, теперь я изучаю, как сделать это быстрее, эффективнее и надежнее.
Вот сердцевина моего кода, довольно простая и простая, и по большей части работает.
$output = Get-EventLog `
-instanceID 4672,4647,4634,4624,4625,4648,4675,4800,4801,4802,4803 `
-logName Security `
-after (Get-Date $inStartDate) `
-before (Get-Date $inEndDate).addDays(1) `
-message ("*" + $InUserID + "*") `
-computerName $inPCID
Я предполагаю, что есть несколько вопросов, которые я до сих пор не смог выяснить в своем исследовании. Зачем Get-EventLog нужно устанавливать так много подключений? Это из-за того, что соединение постоянно обрывалось или что-то в этом роде?
Каким будет самый быстрый способ получить эти данные - использовать собственную команду Get-EventLog
, указав -ComputerName
, или я должен использовать что-то вроде Enter-PSSession
или Invoke-Command
.
Будут ли у Enter-PSSession
и Invoke-Command
те же проблемы, что и у меня с Get-EventLog
?
Я бы не хотел использовать Enter-PSSession
и Invoke-Command
по той простой причине, что я не могу гарантировать, что на всех машинах в компании будет включено удаленное выполнение.
Get-WinEvent
— новой более мощной заменыGet-Event
? - person Richard   schedule 02.05.2012