Події Windows (журнал подій) - важливий інструмент, який дозволяє адміністратору відстежувати помилки, попередження та інші інформаційні повідомлення, які записуються операційною системою, її компонентами та різними програмами. Щоб переглянути журнал подій Windows, ви можете використовувати Graphic Graphic MMC -обладнання ( EventVwr.MSC
). У деяких випадках набагато зручніше використовувати PowerShell для пошуку інформації в журналах подій та аналізу та їх аналізу. У цій статті ми покажемо, як отримувати інформацію з журналів подій Windows за допомогою командного плану Підрозділ.
Зміст:
- Отримання журналів Windows за допомогою Weeineent
- Отримати підрозділу: Швидкий пошук у перегляді події з FilterHashtable
- Розширені події подій, що використовують вік
- Отримайте журнали перегляду подій з віддалених комп’ютерів
Отримання журналів Windows за допомогою Weeineent
Щоб використовувати команду get-wineent, вам потрібно запустити PowerShell з правами адміністратора (при запуску відбуків від імені користувача ви не зможете отримати доступ до деяких журналів, наприклад, безпека).
Щоб отримати список подій з певного журналу, вам потрібно вказати його ім’я. У цьому прикладі ми відкливимо останні 20 подій з журналу System:
Get -winee -logname додаток -maxevents 20
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, повідомлення
У параметрі FilterHashtable ви можете використовувати фільтри відповідно до наступних атрибутів подій:
- Логнам
- Провайдер Ім'я
- Шлях
- Ключові слова (для пошуку успішних подій вам потрібно використовувати значення 9007199254740992 або за невдалі спроби 4503599627370496)
- Ідентифікатор
- Рівень (1 = фатальний, 2 = помилка, 3 = попередження, 4 = інформація, 5 = налагодження, 6 = слід, 0 = інформація)
- Час початку
- Кінцевий час
- UserID (користувач SID)
- Дані
Приклад пошуку події протягом певного періоду часу:
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 ви можете використовувати графічну консоль перегляду подій:
- Запуск
EventVwr.MSC
; - Знайдіть журнал, для якого ви хочете створити та вибрати Журнал струму фільтра;
- Виберіть необхідні параметри запиту у формі. У цьому прикладі я хочу знайти події з певними EventID за останні 7 днів від конкретного користувача;
- Щоб отримати код запиту XML для параметра FilterXML, перейдіть на вкладку XML і скопіювати отриманий код (Ctrl+A, Ctrl+C);
- Якщо потрібно, ви можете вручну редагувати цей запит.
Щоб експортувати список подій у файлі 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
- Видалення файлу або папки на файловому сервері
- Програма запуск історій у Windows
- Шукайте події введення користувачів у Windows
- Active Directory: Хто створив користувача, який скинув пароль користувача або додав його до групи безпеки реклами