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
РЕДАКТИРОВАТЬ КОНТРОЛЬ
Ансгар избил меня предложением выражений. Извиняюсь за путаницу. Недостаток знаний с моей стороны.