Скрипт предназначен для поиска событий удалений файлов на файловом сервере Windows (при условии, что соответствующие настройки аудита заданы)
Сначала выполняется поиск всех событий с кодами 4663, 4659 в журнале "Безопасность"
После чего фильтруются именно события удаления файлов по полю "Маска доступа"
И удаляются дубликаты событий путем добавления событий в структуру данных "Хеш таблица"
Дубликаты событий наблюдаются если удалять файл в расшаренной папке на самом сервере (получив доступ на него с консоли или через RDP), а не удаленно через SMB (зайдя в проводнике по UNC пути)
Warning
Если командлет Invoke-WebRequest при скачивании файла выдает ошибку (преимущественно на Windows Server)
Запрос был прерван: Не удалось создать защищенный канал SSL/TLS
Можно явно указать команде какую версию протокола использовать, например:
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; Invoke-WebRequest -Uri "https://raw.githubusercontent.com/rsherstnev/UsefullScripts/master/Windows/Find-WhoDeletedFile.ps1" -OutFile Find-WhoDeletedFile.ps1Загрузить скрипт с GitHub в файловую систему
Invoke-WebRequest -Uri "https://raw.githubusercontent.com/rsherstnev/UsefullScripts/master/Windows/Find-WhoDeletedFile.ps1" -OutFile Find-WhoDeletedFile.ps1Импортировать функцию, описанную в файле, в текущую PowerShell сессию
. .\Find-WhoDeletedFile.ps1Импортировать функцию, описанную в файле, в текущую PowerShell сессию
Invoke-Expression (New-Object System.Net.WebClient).DownloadString("https://raw.githubusercontent.com/rsherstnev/UsefullScripts/master/Windows/Find-WhoDeletedFile.ps1")| Опция | Функционал |
|---|---|
| StartTime | Если не указать явно - будет подразумеваться "Сегодня" Иначе - поиск будет производиться с указанного времени до текущего момента |
| FileName | Паттерн для поиска Например, если указать "txt", будут искаться все файлы, которые в своем пути содержат это слово |
| GUI | Если не указать данную опцию, вывод найденных событий будет осуществлен в консоль, иначе - в графическое окно |
Вывести события удаления docx файлов за сегодня в консоль
Find-WhoDeletedFile -FileName "docx"Вывести события удаления docx файлов за сегодня в графическое окно
Find-WhoDeletedFile -FileName "docx" -Gui $trueВывести события удаления всех файлов в период со вчера до текущего момента в консоль
Find-WhoDeletedFile -StartTime (Get-Date).AddDays(-1)Вывести события удаления pdf файлов в период с 15 января 2024 года до текущего момента в консоль
Find-WhoDeletedFile -FileName "pdf" -StartTime "2024-01-15"Поиск событий удаления конкретного файла в период с 15 января 2024 года до текущего момента в консоль
Find-WhoDeletedFile -FileName "SampleToSearch.pdf" -StartTime "2024-01-15"Скрипт предназначен для анализа настроек аудита файловых операций на файловом сервере Windows
- Проверка глобальных настроек аудита файловый операций в ОС
- Проверка настроек аудита для каждой расшаренной на сервере директории
Warning
Если командлет Invoke-WebRequest при скачивании файла выдает ошибку (преимущественно на Windows Server)
Запрос был прерван: Не удалось создать защищенный канал SSL/TLS
Можно явно указать команде какую версию протокола использовать, например:
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; Invoke-WebRequest -Uri "https://raw.githubusercontent.com/rsherstnev/UsefullScripts/master/Windows/Get-WindowsSharesAudit.ps1" -OutFile Get-WindowsSharesAudit.ps1Загрузить скрипт с GitHub в файловую систему
Invoke-WebRequest -Uri "https://raw.githubusercontent.com/rsherstnev/UsefullScripts/master/Windows/Get-WindowsSharesAudit.ps1" -OutFile Get-WindowsSharesAudit.ps1Импортировать функцию, описанную в файле, в текущую PowerShell сессию
. .\Get-WindowsSharesAudit.ps1Импортировать функцию, описанную в файле, в текущую PowerShell сессию
Invoke-Expression (New-Object System.Net.WebClient).DownloadString("https://raw.githubusercontent.com/rsherstnev/UsefullScripts/master/Windows/Get-WindowsSharesAudit.ps1")Проверка глобальных настроек аудита файловый операций в ОС
Get-OSAuditSettingsПроверка настроек аудита для каждой расшаренной на сервере директории
Get-AllSharesAuditSettingsСовместное выполнение функций Get-OSAuditSettings и Get-AllSharesAuditSettings
Get-WindowsSharesAuditСкрипт для вывода интересующих событий аутентификации
Скрипт получает все события аутентификации в системе, а затем фильтрует их по указанным параметрам и выводит пользователю
Warning
Если командлет Invoke-WebRequest при скачивании файла выдает ошибку (преимущественно на Windows Server)
Запрос был прерван: Не удалось создать защищенный канал SSL/TLS
Можно явно указать команде какую версию протокола использовать, например:
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; Invoke-WebRequest -Uri "https://raw.githubusercontent.com/rsherstnev/UsefullScripts/master/Windows/Get-LogonEvents.ps1" -OutFile Get-LogonEvents.ps1Загрузить скрипт с GitHub в файловую систему
Invoke-WebRequest -Uri "https://raw.githubusercontent.com/rsherstnev/UsefullScripts/master/Windows/Get-LogonEvents.ps1" -OutFile Get-LogonEvents.ps1Импортировать функцию, описанную в файле, в текущую PowerShell сессию
. .\Get-LogonEvents.ps1Импортировать функцию, описанную в файле, в текущую PowerShell сессию
Invoke-Expression (New-Object System.Net.WebClient).DownloadString("https://raw.githubusercontent.com/rsherstnev/UsefullScripts/master/Windows/Get-LogonEvents.ps1")| Опция | Функционал |
|---|---|
| StartTime | Если не указать явно - будет подразумеваться "Сегодня" Иначе - поиск будет производиться с указанного времени до текущего момента |
| IncludeLogonType | Типы событий, которые нужно включить в вывод Если не указать - в вывод будут включены события всех типов |
| ExcludeLogonType | Типы событий, которые нужно исключить из вывода Если не указать - будут включены все события, указанные в опции -IncludeLogonType Можно использовать вместе с опцией -IncludeLogonType, но опция -ExcludeLogonType будет иметь приоритет Если один и тот же тип события будет включен в обе опции, он не будет выводиться в итоговой выборке |
| GUI | Если не указать данную опцию, вывод найденных событий будет осуществлен в консоль, иначе - в графическое окно |
Вывести события интерактивного входа за текущий день в консоль
Get-LogonEvents -IncludeLogonType InteractiveВывести события входа всех типов (кроме сетевого) за текущий день в консоль
Get-LogonEvents -ExcludeLogonType NetworkВывести события интерактивного и удаленного интерактивного входа за текущий день в графическое окно
Get-LogonEvents -IncludeLogonType Interactive, RemoteInteractive -GUI $trueВывести события интерактивного и удаленного интерактивного входа в период с 25.11.2025 до текущего момента в консоль
Get-LogonEvents -IncludeLogonType Interactive, RemoteInteractive -StartTime "2025-11-25"