Получить имя пользователя от Get-Winevent
Как я могу получить "Имя учетной записи" для раздела "Учетная запись, для которой не удалось войти в систему" в выводе ниже от Get-EventLog
? Я знаю, что это включает в себя замену строк, но это просто не получается:
Get-EventLog -ComputerName fs2 -Logname security |
? {$_.eventid -eq "4625"} |
select machinename, eventid, @{n='AccountName';e={$_.ReplacementStrings[2]}},
entrytype, message |
Export-Csv 1.csv -NoTypeInformation
Пример записи в журнале событий:
TimeCreated: 18.05.2016, 8:55:43 ProviderName: Microsoft-Windows-Security-Auditing Id: 4625 Сообщение: не удалось войти в аккаунт. Предмет: Идентификатор безопасности: S-1-5-21-1287344763-2688370722-3395302928-19873 Имя учетной записи: service_adfs Домен аккаунта: ДОМЕН Идентификатор входа: 0xD62E4 Тип входа: 3 Учетная запись, для которой не удалось войти в систему: Идентификатор безопасности: S-1-0-0 Имя учетной записи: user.thatiwant@DOMAIN.com Домен аккаунта:
РЕДАКТИРОВАТЬ: Не уверен, почему они отредактировали мой пост, чтобы включить устаревший командлет, прекрасно работает с новым командлетом get-winevent. Регулярное выражение не работает для меня. Это, кажется, работает, хотя.
get-winevent -computername fs1 -FilterHashtable @{Logname='Security';Id='4625'} |select timecreated, message, machinename, eventid, @{n='AccountName';e={$_.ReplacementStrings[5]}}
1 ответ
Вы можете использовать регулярное выражение на Message
Имущество:
Account For Which Logon Failed.* Account Name:.+?\b(.*?)\s
И вот ваш скрипт:
$regex = 'Account For Which Logon Failed.* Account Name:.+?\b(.*?)\s'
get-eventlog -computername fs2 -logname security |
?{$_.eventid -eq "4625"} |
select machinename,eventid,@{n='AccountName';e={[regex]::Match($_.Message,$regex,[System.Text.RegularExpressions.RegexOptions]::Singleline).Groups[1].Value}},entrytype,message |
export-csv 1.csv -NoTypeInformation