Get-WinEvent Получить только сообщения интерактивного входа - PullRequest
2 голосов
/ 09 декабря 2010

Я пытаюсь заставить этот сценарий PS извлекать журнал безопасности с нескольких компьютеров и искать только код события 4624 и показывать только те журналы, которые содержат «Тип входа: 2» или интерактивный вход в систему. У меня все остальное работает, за исключением части получения только тех журналов только для интерактивного входа. Вот фрагмент моего сценария, если кто-нибудь знает, как это сделать, он будет очень признателен. Если я беру 2 из «Тип входа в систему», это работает, и я получаю все, но если у меня есть что-нибудь после этого, он не выдает никаких ошибок, но также не дает результатов. Да, я подтвердил, что у меня есть события интерактивного входа в систему в течение моего отфильтрованного периода. Спасибо.

$ сервер; Get-WinEvent -computername $ server -FilterHashTable @ {Logname = $ logname; ID = $ eventid; StartTime = $ starttime; EndTime = $ endtime} | где {$ _. Сообщение | Select-String "Тип входа: 2"}

Тим

Ответы [ 4 ]

2 голосов
/ 19 февраля 2014

EventRecord.properties имеют тип входа в список.Чтобы отфильтровать события успешного входа в систему с интерактивным типом входа на сегодняшний день:

Get-winevent -FilterHashtable @{logname='security'; id=4624; starttime=(get-date).date} | where {$_.properties[8].value -eq 2}
1 голос
/ 04 января 2016

Решение проблемы того, как сопоставить пробел между точкой с запятой и числом 2 в первом примере кода в верхней части этой статьи, заключается в использовании шаблона регулярного выражения PowerShell, написанного так: \s+.

Символы шаблона чувствительны к регистру и обычно используются с оператором "-match", но могут эффективно использоваться с командлетом Select-String, как написано в исходном запросе автора. Модифицированный код будет выглядеть так:

Get-WinEvent -FilterHashTable @{LogName="Security";ID=4624} | where { $_.Message | Select-String "Logon Type:\s+2"} 

Кроме того, если сценарию PowerShell необходимо запрашивать более старые операционные системы, в которых все еще используются классические журналы событий, можно также использовать командлет Get-EventLog с тем же шаблоном, как показано здесь:

Get-EventLog -LogName Security -InstanceID 4624 | Where {$_.Message -match "Logon Type:\s+2"}

Ссылки на регулярные выражения PowerShell:

https://technet.microsoft.com/en-us/magazine/2007.11.powershell.aspx https://www.petri.com/powershell-string-parsing-with-regular-expressions

Примечание: шаблон регулярного выражения, на который ссылается этот ответ, описывается Microsoft как “character class”.

Кларк Фроб

1 голос
/ 30 июня 2011

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

Get-WinEvent -max 1000 |где {$ _. Сообщение |findstr / C: «Тип входа»} |Выберите сообщение |fl * |findstr / C: «Тип входа»

Тип входа: 5 Тип входа: 7 ...

Get-WinEvent Security -max 1000 |Выберите ID, Уровень, Сообщение |где {$ _. Сообщение |findstr / C: «Тип входа»} |ft -auto-wrap |подробнее

Сообщение уровня Id


4624 0 Учетная запись успешно вошла в систему.

       Subject:
           Security ID:        (deleted)
           Account Name:        (deleted)
           Account Domain:        (deleted)
           Logon ID:        0x3e7

       Logon Type:            5

....

Get-WinEvent -max 10 -FilterHashtable @ {Logname = 'security'; ID = 4624} |Выберите TimeCreated, MachineName, Сообщение |ft -auto-wrap |больше

TimeCreated MachineName Message ----------- ----------- ------- 29.06.2011 12:36: 35 PM (удалено). Аккаунт был успешно зарегистрирован.

                              Subject:
                                  Security ID:        (deleted)
                                  Account Name:        (deleted)
                                  Account Domain:        (deleted)
                                  Logon ID:        0x3e7

                              Logon Type:            5

...

Get-WinEvent -max 10 -FilterHashtable @ {Logname = 'security';ID = 4624} |Выберите TimeCreated, MachineName, Сообщение |Строка выбора "Тип входа" |больше

@ {TimeCreated = 06/29/2011 12:36:35;MachineName = (удалена);Сообщение = Учетная запись успешно вошла в систему.

Subject:
                                  Security ID:        (deleted)
                                  Account Name:        (deleted)
                                  Account Domain:        (deleted)
                                  Logon ID:        0x3e7

                              Logon Type:            5

...

В этом последнем подходе информация о выборе выбирается из сообщения «За событие входа в систему», добавляется поле TimeCreated и выдается что-то вродеФормат базы данных для всех попыток входа в систему (Id = 4624) в журнале безопасности.Результаты добавляются в CSV.

$ LogonTypes = Get-WinEvent -FilterHashtable @ {Logname = 'security'; Id = 4624}

foreach($ item в $ $ LogonTypes) {($ item | Выбрать TimeCreated, Сообщение | fl * | findstr /G:search.lst) -replace "", "" -join "," |out-file -append test3.csv}

где (столбец) search.lst:

TimeCreated ID безопасности: имя учетной записи: домен учетной записи: идентификатор входа в систему: тип входа в систему: GUID входа в систему: Имя процесса:

1 голос
/ 09 декабря 2010

К вашему сведению, если кто-то еще попытался сделать то же самое, он искал дополнительные пробелы после «Тип входа: Я уверен, как обойти это в PowerShell, но, говоря так, это помогло мне.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...