Powershell Get-EventLog возвращает события по одному - PullRequest
4 голосов
/ 15 апреля 2011

РЕДАКТИРОВАТЬ 26.09.2011: Все еще ищете ответ, если у вас есть какие-либо идеи, пожалуйста, напишите и дайте мне знать!

Краткое изложение проблемы

Когда я запускаю Get-EventLog на своем собственном компьютере или на соседнем компьютере, я не вижу ничего необычного, и все работает как положено.

Когда я запускаю его на компьютере, который находится дальше(средний пинг 108ms) начинает действовать так, как я и не ожидал.Между каждым возвращаемым событием существует длинная пауза, и для ее завершения требуется слишком много времени.

Вот команда, которую я использую:

Get-EventLog -ComputerName [computername] -LogName Application -newest 100

Я ожидаю, что команда соберет всю информацию на удаленном компьютере, а затем отправит ее мне обратно в одну связку, но, похоже, она этого не делает.

Когда я выполняю команду нормально и использую что-то вроде онлайн-секундомер для грубых измерений, результат составляет около 4 минут и 3 секунды.

Когда я измеряю ее с помощью:

Measure-Command {Get-EventLog -ComputerName yanhong03 -LogName Application -newest 100}

Результат составляет около 31 секунды (но никакая информация не распечатывается).

Итак, два вопроса:

  • Почему события (на первый взгляд) извлекаются по одному?
  • Почему используется Measure-Commandфактически изменяет количество времени, которое требуется команде для завершения?

Разное Подробности:

Я использую PowerShell v2 и использую оболочку в PowershellISE для выполнения этих команд.ОС Windows XP.

1 Ответ

1 голос
/ 25 апреля 2011

Поскольку вы используете PowerShell 2, вы можете воспользоваться удаленным взаимодействием.

Попробуйте:

Invoke-Command -ComputerName atliis03 -ScriptBlock { Get-EventLog -LogName Application -newest 100 }

Если вы используете много серверов, вы можете отключитьобрабатывать как фоновое задание:

$job = Invoke-Command -ComputerName atliis03 -ScriptBlock { Get-EventLog -LogName Application -newest 100 } -AsJob

Затем вы можете вернуться и получить результаты:

Receive-Job $job

Команда Get-Job покажет вам состояние всех запущенных заданий.

Надеюсь, это поможет.

...