Get-EventLog Message Получение строки

Мне было интересно, есть ли способ получить информацию из сообщения от Get-EventLog, Пока я использую эту строку кода, чтобы получить сообщение:

(Get-EventLog -Logname Security -InstanceId 4625 -Newest 1).Message

Это извлечет сообщение из идентификатора экземпляра 4625, но из всего сообщения. Я хотел бы захватить: Account Name (2-й), Account Domain (2-й) и Workstation Name,

Вот отображение, когда команда выполняется:

введите описание изображения здесь

Выделенные области - это то, что я хочу отобразить обратно. Это может быть все сразу или просто выдавать разные команды для каждого выделенного.

2 ответа

Используйте регулярные выражения для извлечения информации из сообщения. Пример для извлечения учетной записи и доменного имени:

$msg = (Get-EventLog ...).Message

$re = 'Logon Failed:[\s\S]+?Account Name:\s+(.*)\s+Account Domain:\s+(.*)'
if ($msg -match $re) {
  $account = $matches[1]
  $domain  = $matches[2]
}

$matches[1] а также $matches[2] обратитесь к двум группам захвата ((.*)) в выражении.

Имя рабочей станции можно извлечь с помощью аналогичного выражения.

РЕДАКТИРОВАТЬ: вывод в виде строки, поэтому следующее не будет работать:

Есть ли | select-object Работа? Я не использовал этот командлет и не могу проверить свой ответ.

Таким образом, ваша полная строка может быть:

(Get-EventLog -Logname Security -InstanceId 4625 -Newest 1).message | select-object AccountName,DomainName

РЕДАКТИРОВАТЬ КОНТРОЛЬ

Ансгар избил меня предложением выражений. Извиняюсь за путаницу. Недостаток знаний с моей стороны.

Другие вопросы по тегам