Результат строки фильтра Get-WinEvent и Select-string

Я пытаюсь использовать строку get-winevent + select для фильтрации и получения IP-адреса из событий 4625.

После get-winevent я хочу отфильтровать результаты, чтобы показать только строку «Адрес исходной сети:», которая предоставит мне список IP-адресов, которые мне нужно заблокировать.

Ниже приведен пример результатов, заранее спасибо!

PS C:\Users\Administrator> Get-WinEvent -FilterHashtable @{LogName='Security';ID=4625} -MaxEvents 1 | фл

Время Создано : 15.02.2023 07:43:25 ProviderName : Microsoft-Windows-Security-Auditing Идентификатор: 4625 Сообщение: Не удалось войти в учетную запись.

           Subject:
            Security ID:            S-1-0-0
            Account Name:           -
            Account Domain:         -
            Logon ID:               0x0

           Logon Type:                      3

           Account For Which Logon Failed:
            Security ID:            S-1-0-0
            Account Name:           ADMINISTRATOR
            Account Domain:

           Failure Information:
            Failure Reason:         Unknown user name or bad password.
            Status:                 0xC000006D
            Sub Status:             0xC0000064

           Process Information:
            Caller Process ID:      0x0
            Caller Process Name:    -

           Network Information:
            Workstation Name:       -
            Source Network Address: 209.45.48.94
            Source Port:            0

           Detailed Authentication Information:
            Logon Process:          NtLmSsp
            Authentication Package: NTLM
            Transited Services:     -
            Package Name (NTLM only):       -
            Key Length:             0

Get-WinEvent -FilterHashtable @{LogName='Security';ID=4625} -MaxEvents 100 | Select-String -Pattern «Адрес исходной сети:» пытался таким образом, но результатов не было

Запуск PHP на IIS без использования программы установки веб-платформы
Запуск PHP на IIS без использования программы установки веб-платформы
Установщик веб-платформы, предлагаемый компанией Microsoft, перестанет работать 31 декабря 2022 года. Его закрытие привело к тому, что мы не можем...
Оптимизация React Context шаг за шагом в 4 примерах
Оптимизация React Context шаг за шагом в 4 примерах
При использовании компонентов React в сочетании с Context вы можете оптимизировать рендеринг, обернув ваш компонент React в React.memo сразу после...
Библиотека для работы с мороженым
Библиотека для работы с мороженым
Лично я попрощался с операторами print() в python. Без шуток.
Настройка шаблона Metronic с помощью Webpack и Gulp
Настройка шаблона Metronic с помощью Webpack и Gulp
Я пишу эту статью, чтобы поделиться тем, как настроить макет Metronic с помощью Sass, поскольку Metronic предоставляет так много документации, и они...
Уроки CSS 6
Уроки CSS 6
Здравствуйте дорогие читатели, я Ферди Сефа Дюзгюн, сегодня мы продолжим с вами уроки css. Сегодня мы снова продолжим с так называемых классов.
Что такое Css? Для чего он используется?
Что такое Css? Для чего он используется?
CSS, или "Каскадные таблицы стилей", - это язык стилей, используемый в веб-страницах. CSS является одним из основных инструментов веб-разработки...
1
0
50
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

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

$regex = [regex]::new("\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b")
Get-WinEvent -FilterHashtable @{LogName='Security';ID=4625} -MaxEvents 100 | Foreach {$regex.Match($_.Message).Value}

Этот код перебирает каждый результат, который возвращает Get-WinEvent, и проверяет с помощью регулярного выражения IP-адрес в свойстве сообщения. Если совпадений не найдено, возвращается пустая строка.

Удивительный! Работал, как ожидалось! Спасибо!

Aucesar 15.02.2023 17:47

Чтобы получить информацию из журнала событий Windows, сложно попытаться проанализировать ее из строки сообщения.

Лучше посмотрите на XML, где значения можно найти под собственными именами атрибутов:

$result = Get-WinEvent -FilterHashtable @{LogName='Security';ID=4625} -MaxEvents 100 | ForEach-Object {
    # convert the event to XML and grab the Event node
    $eventXml = ([xml]$_.ToXml()).Event
    # output the values from the XML representation
    [PsCustomObject]@{
        UserName  = ($eventXml.EventData.Data | Where-Object { $_.Name -eq 'TargetUserName' }).'#text'
        IpAddress = ($eventXml.EventData.Data | Where-Object { $_.Name -eq 'IpAddress' }).'#text'
        EventDate = [DateTime]$eventXml.System.TimeCreated.SystemTime
    }
}

Теперь, если все, что вам нужно, это список IP-адресов, просто выполните

$result.IpAddress

Тео Спасибо за пример, попробую!

Aucesar 15.02.2023 17:47
Ответ принят как подходящий
(Get-WinEvent -FilterHashtable @{LogName='Security';ID=4625} -MaxEvents 1).Message.split(':') -split("`t") | ? { $_ -match '\d+\.\d+\.\d+.\d+'} | % {$_ -replace ("`n","")}

Удивительный! Работал, как ожидалось! Спасибо!

Aucesar 15.02.2023 17:47

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