|
Друзі сайту
|
Get-WinEvent: читаємо Event Log у PowerShell — правильно і швидкоЦикл: IT-Wiki / Атлас команд Windows Переглядів: 2
Перед стартом
Get-WinEvent vs Get-EventLog vs wevtutil
Синтаксис FilterHashtable — ключ до швидкостіНайчастіший anti-pattern початківців: Get-WinEvent -LogName System | Where-Object {$_.Id -eq 41}
Це читає весь System-лог у пам'ять, потім фільтрує. На сервері з великим логом — 30-60 секунд і гігабайти RAM. Правильно: Get-WinEvent -FilterHashtable @{LogName='System'; Id=41}
Тут фільтр передається в ядро Event Log API, результат повертається вже відфільтрований — 1-2 секунди на тому ж сервері. Ключі FilterHashtable:
Сценарій 1. Чому сервер перезавантаживсяЗадача: вчора вночі сервер перезавантажився. Треба зрозуміти — планове оновлення, BSOD, чи адмін сам? Get-WinEvent -FilterHashtable @{LogName='System'; Id=41,1074,6006,6008} -MaxEvents 10 | Select TimeCreated, Id, Message
Що показують ці події:
За цими 4 подіями ви 90% випадків одразу розумієте природу reboot. Сценарій 2. Account lockout forensicsЗадача: користувач скаржиться, що «мене заблокувало». Треба знайти, звідки йшли невдалі логіни. На PDC (де реєструються всі lockout) у Security-лог: Get-WinEvent -FilterHashtable @{LogName='Security'; Id=4740} -MaxEvents 20 |
ForEach-Object {
[PSCustomObject]@{
Time = $_.TimeCreated
User = $_.Properties[0].Value
CallerComputer = $_.Properties[1].Value
}
}
Event 4740 — «A user account was locked out». У Далі на цьому комп'ютері: Get-WinEvent -FilterHashtable @{LogName='Security'; Id=4625; StartTime=(Get-Date).AddMinutes(-30)} |
Select TimeCreated, @{n='AccountName';e={$_.Properties[5].Value}}, @{n='Source';e={$_.Properties[19].Value}}
Event 4625 — «Failed logon». Звідси видно причину блокування: збережений пароль у scheduled task, RDP-сесія з застарілим паролем, VPN-клієнт, тощо. Сценарій 3. Падіння застосунку — шукаємо крашдампиЗадача: Outlook падає у випадкових користувачів. Треба зібрати статистику по падіннях за тиждень. Get-WinEvent -FilterHashtable @{
LogName='Application';
ProviderName='Application Error';
StartTime=(Get-Date).AddDays(-7)
} | Group-Object {($_.Properties[0].Value)} | Sort Count -Descending | Select Count, Name
Групуємо за назвою exe — побачите, яка програма крашиться найчастіше. Якщо Outlook у топі — далі дивимось конкретні повідомлення: Get-WinEvent -FilterHashtable @{
LogName='Application';
ProviderName='Application Error';
StartTime=(Get-Date).AddDays(-1)
} | Where-Object {$_.Properties[0].Value -eq 'OUTLOOK.EXE'} | Format-List TimeCreated, Message
Сценарій 4. Події конкретної служби — Group Policy, PrintServiceApplication-and-Services Logs — це сотні окремих логів для кожного компонента. Їхні повні імена містять слеш ( Get-WinEvent -LogName 'Microsoft-Windows-GroupPolicy/Operational' -MaxEvents 20 | Select TimeCreated, Id, Message Для пошуку імен логів за ключовим словом: Get-WinEvent -ListLog '*GroupPolicy*' | Select LogName, RecordCount Список усіх логів з подіями за останню добу: Get-WinEvent -ListLog * | Where-Object {$_.RecordCount -gt 0 -and $_.LastWriteTime -gt (Get-Date).AddDays(-1)} | Sort LastWriteTime -Descending
Сценарій 5. Віддалений серверGet-WinEvent -FilterHashtable @{LogName='System'; Level=1,2; StartTime=(Get-Date).AddHours(-24)} -ComputerName DC01.corp.local -MaxEvents 30
Рівні 1 і 2 — Critical і Error. Масово за усіма DCs: $dcs = Get-ADDomainController -Filter * | Select -Expand HostName
foreach ($dc in $dcs) {
$events = Get-WinEvent -FilterHashtable @{LogName='System'; Level=1,2; StartTime=(Get-Date).AddHours(-24)} -ComputerName $dc -ErrorAction SilentlyContinue
[PSCustomObject]@{
DC = $dc
CritErrorCount = $events.Count
}
}
Сценарій 6. XPath-фільтр для складних запитівКоли FilterHashtable замалий (наприклад, шукати подію, де EventData містить конкретний SID), використовуйте XPath через Get-WinEvent -LogName Security -FilterXPath "*[EventData[Data[@Name='SubjectUserName']='ivanov']]" -MaxEvents 50 XPath працює з уподобаною серверу XML-структурою події — дозволяє фільтрувати по будь-якому полю всередині EventData. Типові пасткиПастка 1:
-FilterHashtable strict про типи
Пастка 2:
-MaxEvents на великому часовому діапазоніБез Пастка 3: Time zone
Пастка 4: Security-лог тільки для адміна
Без прав адміна на цільовій машині Security-лог читається як «Access denied». Якщо запускаєтесь з непривілейованого облікового запису — отримуєте нічого, навіть не зрозумівши причини. Коротка пам'яткаНайчастіше
Пов'язане
Event Viewer — для обзору. Get-WinEvent — для роботи. Різниця особливо гостро відчувається, коли логи великі. Інші статті цього циклу
|
Опитування
Якою програмою обліку ви користуєтесь?
Архів
Хмаринка тегів
1С Active Directory Applied cheatsheet Dahua diskpart DISM Event Log Get-Service gpresult gpupdate Hikvision ipconfig MBR netsh ping PowerShell Restart-Service RSoP services TCP Test-NetConnection UEFI Vstarcam WEB Windows Windows Services winsock WMI filter Конфігурація Ніжин Ніжин відеоспостереження виробництво впровадження відеонагляд відеоспостереження дизайн монтаж розділи інтеграція
|
![[IT-FORMAT]](/uploads/logo22.png)
