2017-02-09 6 views
0

Цель: создать сценарий, который захватывает журналы событий за последний день с определенных компьютеров, а затем заглянуть в раздел сообщений для фильтрации данных на основе определенных IP-адресов (сначала), а затем снова фильтровать эти данные только для элементов, которые запускаются с определенным ключевым словом, а затем вывод в HTML.Фильтрация/Соответствие записей в журнале событий

Код:

$fileDate = (Get-Date -Format ddMMyyyy) + ".html" 
$EventGrab = Invoke-Command { 
    Get-EventLog -LogName Security -After (Get-Date).AddDays(-1) -EntryType FailureAudit 
} -ComputerName whatever 
$EventGrab | 
    Sort-Object -Property TimeWritten -Descending | 
    Select-String -InputObject {$_.TimeWritten,$_.message} -Pattern "10.1.2.13" | 
    ConvertTo-Html | 
    Out-File C:\$fileDate 

Грубые шаги:

  1. Создает файл с датой.
  2. Захват журналов событий из журнала безопасности с помощью FailureAudit за последние 24 часа.
  3. Проверьте раздел сообщения для вышеуказанного шаблона (устройств).
  4. Преобразование в HTML и выводит в файл с датой, начиная с шага 1.

Проблема находится между шагом 3 и 4; Мне нужно выяснить, чтобы отфильтровать сообщение еще раз после шага 3, который будет принимать поле сообщения и только смотреть в нем для конкретного синтаксиса (пример LTC), а затем выводить эти данные, если он нашел его в HTML-файле.

Я думаю, что это просто еще один Select-String, или что-то, но не может понять это.

Пример входных данных (@Select-String секции):

02/08/2017 15:51:57 Network Policy Server denied access to a user. 
Contact the Network Policy Server administrator for more information. 
User: 
Security ID:     S-1-0-0 
Account Name:     <scrubbed> 
Account Domain:     <scrubbed> 
Fully Qualified Account Name: <scrubbed> 

Client Machine: 
Security ID:     S-1-0-0 
Account Name:     - 
Fully Qualified Account Name: - 
OS-Version:      - 
Called Station Identifier:  00-1B-53-41-5A-57 
Calling Station Identifier:  F8-CA-B8-57-1A-9B 

NAS: 
NAS IPv4 Address:    10.1.2.13 
NAS IPv6 Address:    - 
NAS Identifier:     - 
NAS Port-Type:     Ethernet 
NAS Port:      50324 

RADIUS Client: 
Client Friendly Name:   <scrubbed> 
Client IP Address:    10.1.2.13 

Authentication Details: 
Connection Request Policy Name: <scrubbed> 
Network Policy Name:   - 
Authentication Provider:  Windows 
Authentication Server:   <scrubbed> 
Authentication Type:   PEAP 
EAP Type:      Microsoft: Secured password (EAP-MSCHAP v2) 
Account Session Identifier:    - 
Logging Results:    Accounting information was written to the local log file. 
Reason Code:     8 
Reason:       The specified user account does not exist. 

Ожидаемые результаты:

Значение выше изменено таким образом, что только имя учетной записи является host/LTC<whatever>.

ответ

0

Использование Where-Object для фильтрации записей и Select-String для извлечения строк из сообщения:

$EventGrab | 
    Sort-Object -Property TimeWritten -Descending | 
    Where-Object { 
     $_.Message -like '*10.1.2.13*' -and 
     $_.Message -like '*LTC*' 
    } | 
    Select-Object TimeWritten, @{n='Account';e={ 
     Select-String -InputObject $_.Message -Pattern 'Account Name:\s+(.*LTC.*)' | 
      Select-Object -Expand Matches | 
      ForEach-Object { $_.Groups[1].Value } 
    }} | 
    ConvertTo-Html | 
    Out-File C:\$fileDate 
+0

Хм. Это, похоже, не функционировало должным образом (без вывода данных). Я думаю, что, возможно, я объяснил это неправильно, или я что-то упустил. В данных $ _. Message от EventGrab он отбросит кучу информации в этом поле «Сообщение», я ищу, чтобы соответствовать в этом огромном количестве данных либо 10.1.2.13, либо LTC, который выглядит прямо выше, но я 'Интересно, если он ищет только '10 .1.2.13' и/или 'LTC', являющийся строкой вместо того, чтобы просто быть частью строки в огромном сообщении. – elderusr07

+0

Пожалуйста, отредактируйте свой вопрос и предоставите образец ввода и вывода. –

+0

Добавлен некоторый ожидаемый вход/выход. – elderusr07