Windows Server 2019

Переглянути та аналіз подій (журналів) Windows за допомогою PowerShell

Переглянути та аналіз подій (журналів) Windows за допомогою PowerShell

Події Windows (журнал подій) - важливий інструмент, який дозволяє адміністратору відстежувати помилки, попередження та інші інформаційні повідомлення, які записуються операційною системою, її компонентами та різними програмами. Щоб переглянути журнал подій Windows, ви можете використовувати Graphic Graphic MMC -обладнання ( EventVwr.MSC ). У деяких випадках набагато зручніше використовувати PowerShell для пошуку інформації в журналах подій та аналізу та їх аналізу. У цій статті ми покажемо, як отримувати інформацію з журналів подій Windows за допомогою командного плану Підрозділ.

Зміст:

На даний момент у Windows доступні два командири для доступу до подій у журналі подій: Отримати і Підрозділ. У переважній більшості випадків ми рекомендуємо використовувати get-ineent, t.до. Це більш продуктивно, особливо в сценаріях великої кількості подій з віддалених комп'ютерів. Команда Get-eventLog застаріла і використовується для отримання журналів у попередніх версіях Windows. Крім того, Get-EntLog не підтримується в сучасних версіях PowerShell Core 7.X.

Отримання журналів Windows за допомогою Weeineent

Щоб використовувати команду get-wineent, вам потрібно запустити PowerShell з правами адміністратора (при запуску відбуків від імені користувача ви не зможете отримати доступ до деяких журналів, наприклад, безпека).

Щоб отримати список подій з певного журналу, вам потрібно вказати його ім’я. У цьому прикладі ми відкливимо останні 20 подій з журналу System:

Get -winee -logname додаток -maxevents 20

Найчастіше вам потрібно буде отримувати інформацію від журналів системи, програми, безпеки або налаштування. Але ви можете вказати інші журнали. Повний список подій у Windows можна отримати за допомогою команди:

Get -wineeent -listlog *

Наприклад, для того, щоб відобразити підключення RDP на комп'ютер, вам потрібно вказати журнал Microsoft-Windows-terminalService -MoteConnectionManager/Operational:

Get-Winee-Logname Microsoft-Windows-terminalservices-remoteConnectionManager/Operational

Або дістати журнали SSH до Windows від OpenSsh/Operational:

Get -wineeent -logname openssh/оперативний

Ви можете вибрати події з декількох журналів одночасно. Наприклад, щоб отримати інформацію про помилки та попередження від журналів системи та додатків за останні 24 години (день), ви можете використовувати наступний код:

$ Startdate = (get -date) -(new -timespan -day 1)
Застосування Get-Wine, система | Що -Object ($ _.LevelDisplayName -eq "помилка" -or $ _.LevelDisplayName -eq "попередження") -і ($ _.Timecreed -ge $ startdate)

Щоб відобразити лише певні поля подій, ви можете використовувати вибрати -об'єкт або таблицю формату:

Get -wineeent -logname System | Формат-таблиця машини, Timecreted, ID, userID

Ви можете здійснити додаткові перетворення з отриманими даними. Наприклад, у цьому прикладі ми негайно перетворимо ім'я користувача в SID:

Get -wineeent -filterhash @logname = 'система' |
Виберіть -Object @name = "ComputEnmane"; exmanse = $ _.MachineName,@name = "ім'я користувача"; exmanse = $ _.Ідентифікатор користувача.Перекладати ([система.Безпека.Директор.Ntaccount]).Значення, timecreted

Отримати підрозділу: Швидкий пошук у перегляді події з FilterHashtable

Наведений вище метод вибору певних подій з журналів перегляду подій, використовуючи вибір -об'єкт, легко зрозуміти, але виконується надзвичайно повільно. Це особливо помітно, коли зразок великої кількості подій. У більшості випадків потрібно використовувати фільтрацію на стороні служби перегляду подій за допомогою параметра Filterhashtable.

Давайте спробуємо сформувати список помилок та попереджень протягом 30 днів, використовуючи -об'єкт та фільтрування. Порівняна швидкість цих двох команд PowerShell за допомогою командування:

$ Startdate = (заграти).Adddays (-30)

Давайте перевіримо швидкість команди за допомогою того, що -об'єкт:

Но.LevelDisplayName -eq "помилка" -or $ _.LevelDisplayName -eq "попередження") -і ($ _.Timecreed -ge $ startdate)).TotalMilliseconds

Подібна команда з FilterHashtable:

Но

Цей приклад показує, що команда вибору подій через FilterHashtable виконується в 30 разів швидше, ніж якщо звичайний -об'єкт ( 2.п’ять SEC проти 76 секунди).

Якщо вам потрібно знайти події EventID, використовуйте наступну команду з FilterHashtable:

Get -winee -filterhashtable @logname = 'system'; id = 1074 | ft timecreed, id, повідомлення

У цьому прикладі ми отримали останні перезавантаження та вимкнення вікон, що дозволяє визначити, хто перезавантажив/вимкнути комп'ютер за допомогою Windows.

У параметрі FilterHashtable ви можете використовувати фільтри відповідно до наступних атрибутів подій:

Приклад пошуку події протягом певного періоду часу:

Get -wineeent -filterhashtable @logname = 'система'; Starttime = (загартати).Adddays (-7); EndTime = (заграти).Addhours (-1); Id = 1234

Якщо вам потрібно знайти певний текст у описі події, ви можете використовувати цю команду:

Get -winee -filterhashtable @logname = 'system' | що $ _.Повідомлення -як "*usb*"

Розширені події подій, що використовують вік

Фільтри для підрозділу з параметром FilterHashtable дещо обмежені. Якщо вам потрібно використовувати складні запити з багатьма умовами для вибору подій, вам потрібно використовувати параметр Filterxml, що дозволяє формувати запит на вибір подій у перегляді подій за допомогою XML -запиту. Як і FilterHashtable, фільтри фільтрах на стороні сервера виконуються, тому ви отримаєте результат досить швидко.

Наприклад, подібний запит на останні помилки з журналу системи за останні 30 днів може виглядати так:

$ xmlquery = @'


*[Система [(рівень = 2 або рівень = 3) та часовий час [TimeDiff (@Systemtime) <= 2592000000]]]


'@
Get -winee -filterxml $ xmlquery

Для створення коду складних запитів XML ви можете використовувати графічну консоль перегляду подій:

  1. Запуск EventVwr.MSC ;
  2. Знайдіть журнал, для якого ви хочете створити та вибрати Журнал струму фільтра;
  3. Виберіть необхідні параметри запиту у формі. У цьому прикладі я хочу знайти події з певними EventID за останні 7 днів від конкретного користувача;
  4. Щоб отримати код запиту XML для параметра FilterXML, перейдіть на вкладку XML і скопіювати отриманий код (Ctrl+A, Ctrl+C);
  5. Якщо потрібно, ви можете вручну редагувати цей запит.

Щоб експортувати список подій у файлі CSV, вам потрібно використовувати командира експорту CSV:

$ Події = get -wineeent -filterxml $ xmlquery
$ Події | Експорт-CSV "C: \ ps \ filtersysevents.CSV "-notypeInformation -Encoding UTF8

Отримайте журнали перегляду подій з віддалених комп’ютерів

Щоб отримати подію з віддаленим комп'ютером, достатньо вказати його ім'я в параметрі -computErname:

$ computer = 'MSK-DC01'
Get -wineeent -ComputErname $ computer -filterhashtable @logname = "Система"; Starttime = (загартати).Addhours (-24) | Виберіть повідомлення, ідентифікатор, тимчасовий

Ви можете взяти інтерв'ю з кількома серверами/комп’ютерами та шукати на них певні події. Список серверів можна отримати з текстового файлу:

$ Servers = get -Content -Path C: \ PS \ SERVER.TXT

Або з Active Directory:

$ Servers = (get -dcomputer -filter 'eperatingSystem -like "*Windows Server*" -увімкнено -eq "true"').Назва
Foreach ($ сервер у $ серверах)
Get -wineeent -ComputErname $ server -maxevents 5 -filterhashtable @
Logname = 'система'; Id = 1234
| Виберіть -Object -Property ID, AmainEname

Є ще один приклад для пошуку подій блокування облікового запису користувача на всіх контролерах домену:

$ Username = 'a.Іванов '
Get -ddomaincontroller -fi * | Виберіть -Exp Ім'я хоста | %
$ Gweparams = @
'Computerame' = $ _
'Logname' = 'безпека'
'Filterxpath' = "*[System [eventId = 4740] та EventData [дані [@name = 'targetUsername'] = '$ username']"] "" "" ""

$ Події = get-winevent @gweparams
$ Події | Foreach $ _.Комп'ютер + "" + $ _.Властивості [1].Значення + " + $ _.Timecreed

Ще кілька прикладів використання підрозділу для пошуку подій:

FersSystemWatch - спостереження за змінами на дисках та в реєстрі
Не секрет, що навіть під час видимої бездіяльності операційна система може виконувати певні операції, створювати та видаляти файли, переписувати ключі...
Як повернути зниклі входи та паролі у Firefox
Лише днями багато користувачів популярного браузера Фефокс став жертвою дивної помилки, в результаті яких паролі на сайтах перестали працювати у спост...
Неконтрольований віддалений доступ до хоста TeamViewer
TeamViewer - Одна з найпопулярніших програм для віддаленого доступу серед мешканців. Його некомерційне використання безкоштовне, воно можна використов...