⚡ У вас нет под рукой GUI? Нужно за 30 секунд проверить десять машин в домене? Или вы принципиально не доверяете графическим утилитам и хотите видеть сырые данные из недр Windows? Добро пожаловать в мир PowerShell-аудита.
Графические инструменты вроде Autoruns великолепны для точечной работы. Но в арсенале системного инженера 2026 года должен быть и другой подход — скриптовый. PowerShell дает то, чего не даст ни один GUI: воспроизводимость, автоматизацию, массовое применение и прозрачность каждого запроса к системе.
🛠 Подписывайтесь на канал «Настройки Windows» — здесь мы разбираем ОС без маркетинговой шелухи и даем только рабочие технические решения.
🛡️ ВЗНОС В РАЗВИТИЕ КАНАЛА И СОЗДАНИЕ ПОЛЕЗНЫХ СКРИПТОВ 🛡️
Сегодня соберем набор универсальных однострочников и один полноценный скрипт, которые превратят PowerShell в мощный сканер автозагрузки. Всё нижеперечисленное работает на Windows 10 (включая ESU) и Windows 11, на PowerShell 5.1 и PowerShell 7.6.
Базовые принципы: почему именно эти команды
🎯 Все команды используют CIM-инстансы (Get-CimInstance), а не устаревшие WMI (Get-WmiObject). CIM работает быстрее, поддерживает удаленное выполнение по протоколу WS-Man и является стандартом для современных версий Windows.
🎯 Все однострочники не требуют установки дополнительных модулей. Они работают на чистой системе «из коробки».
🎯 Фильтрация построена на регулярных выражениях через оператор -match. Это дает гибкость: вы можете легко адаптировать шаблоны под свои задачи.
🎯 Вывод отформатирован через Format-Table -AutoSize или Format-List — удобно читать как в консоли, так и при экспорте.
⚠️ Важное предупреждение по безопасности:
Используйте скрипты и команды только с этого канала. Оригинальные материалы регулярно обновляются и проверяются. Копии на сторонних ресурсах могут подвергаться изменению и внедрению вредоносного кода. Я не несу ответственности за последствия запуска скриптов, скачанных с чужих каналов. С уважением. Александр.
Автозагрузка: классика и реестр
📋 Полный список записей автозагрузки через CIM (одна строка):
Get-CimInstance Win32_StartupCommand | Select-Object Name, Command, Location, User | Format-Table -AutoSize
Эта команда собирает данные из реестра Run, RunOnce, папки Startup и некоторых других источников. Быстро, надежно, универсально.
🔑 Прямое чтение веток Run из реестра (одна строка):
Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Run','HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Run' -ErrorAction SilentlyContinue | Format-List
Этот запрос дает «сырой» срез реестра без фильтрации. Полезно, когда нужно увидеть абсолютно всё, включая записи, которые CIM может пропустить.
🧬 Расширенный поиск по всем реестровым веткам автозагрузки (одна строка):
'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Run','HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce','HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Run','HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce' | ForEach-Object { if (Test-Path $_) { Get-ItemProperty $_ } } | Format-List
Службы: ищем аномальные пути
🔎 Службы с подозрительными путями запуска (одна строка):
Get-CimInstance Win32_Service | Where-Object {$_.PathName -match 'Users|Temp|AppData|Downloads'} | Select-Object Name, DisplayName, PathName, StartMode | Format-Table -AutoSize
Легитимные системные службы живут в C:\Windows\System32\. Если путь ведет в пользовательские папки — это повод для расследования.
⚙️ Автоматические службы в остановленном состоянии (одна строка):
Get-Service | Where-Object {$_.StartType -eq 'Automatic' -and $_.Status -eq 'Stopped'} | Select-Object Name, DisplayName, Status | Format-Table -AutoSize
Показывает службы, которые должны работать, но по какой-то причине остановлены. Это может быть как сбой, так и намеренное отключение вредоносным ПО конкурента.
Драйверы: контроль ядра
🧪 Драйверы без цифровой подписи (требует прав администратора, одна строка):
Get-CimInstance Win32_SystemDriver | Where-Object {$_.Signed -eq $false} | Select-Object Name, DisplayName, PathName, State | Format-Table -AutoSize
В 2026 году неподписанный драйвер в ядре — это либо руткит, либо серьезная поломка системы. Любая такая запись требует немедленного разбора.
🛡️ Драйверы со сторонних путей (одна строка):
Get-CimInstance Win32_SystemDriver | Where-Object {$_.PathName -notmatch 'Windows\\System32|Windows\\SysWOW64'} | Select-Object Name, DisplayName, PathName | Format-Table -AutoSize
Показывает все драйверы, которые физически лежат вне системных папок. Полезно для выявления BYOVD-атак.
Планировщик заданий: любимое место угроз
🎯 Задачи, запускающие PowerShell или CMD с подозрительными флагами (одна строка):
Get-ScheduledTask | Where-Object {$_.Actions.Execute -match 'powershell|cmd' -and $_.Actions.Arguments -match '-enc|-w hidden|-ExecutionPolicy Bypass'} | Select-Object TaskName, TaskPath, State | Format-Table -AutoSize
Триггеры -enc (закодированная команда), -w hidden (скрытое окно) и -ExecutionPolicy Bypass — классические маркеры вредоносной активности.
📅 Задачи с запуском из временных папок (одна строка):
Get-ScheduledTask | Where-Object {$_.Actions.Execute -match 'Temp|AppData|Downloads|Public'} | Select-Object TaskName, TaskPath, @{N='Action';E={$_.Actions.Execute}} | Format-Table -AutoSize
Продвинутый уровень: WMI-подписки и COM
🕸️ WMI Event Subscriptions — скрытый механизм персистентности (одна строка):
Get-CimInstance -Namespace root\subscription -ClassName __EventFilter -ErrorAction SilentlyContinue | Select-Object Name, Query, Creator | Format-List
WMI-подписки позволяют запускать код в ответ на системные события. Это излюбленный инструмент продвинутых APT-группировок, потому что такие записи не видны в классических вкладках автозагрузки.
💳 Донат через Ozon (от 10 ₽. Получатель: Александр Г.)
🔗 COM-объекты автозагрузки (одна строка):
Get-ChildItem 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Browser Helper Objects','HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Shell Extensions\Approved' -ErrorAction SilentlyContinue | Get-ItemProperty | Format-List
Browser Helper Objects и некоторые Shell Extensions — это точки внедрения, которые часто упускают из виду.
Экспорт результатов: делимся с коллегами
📊 Экспорт списка автозагрузки в CSV (одна строка):
Get-CimInstance Win32_StartupCommand | Select-Object Name, Command, Location, User | Export-Csv -Path "$env:USERPROFILE\Desktop\StartupAudit.csv" -NoTypeInformation -Encoding UTF8
Удобно для передачи коллегам по ИБ или для архивации снимка системы.
🌐 Экспорт в HTML-отчет с форматированием (одна строка):
Get-CimInstance Win32_StartupCommand | Select-Object Name, Command, Location | ConvertTo-Html -Title "Startup Audit" | Out-File "$env:USERPROFILE\Desktop\StartupReport.html"
Готовый скрипт: полный аудит одной машиной
📦 Для комплексной проверки сохраните следующий код в файл Audit-Startup.ps1 и запустите от имени администратора. Сохранять в UTF-8!!
Write-Host "`n=== AUDIT STARTUP: $(Get-Date) ===" -ForegroundColor Cyan
Write-Host "═══════════════════════════════════════════════════════════" -ForegroundColor Gray
Write-Host "`n[1] STARTUP COMMANDS (CIM)" -ForegroundColor Yellow
Write-Host "───────────────────────────────────────────────────────────" -ForegroundColor DarkGray
Get-CimInstance Win32_StartupCommand -ErrorAction SilentlyContinue |
Select-Object Name, Command, Location |
Format-Table -AutoSize
Write-Host "`n[2] REGISTRY RUN KEYS" -ForegroundColor Yellow
Write-Host "───────────────────────────────────────────────────────────" -ForegroundColor DarkGray
$RunPaths = @(
'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Run',
'HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Run'
)
foreach ($path in $RunPaths) {
Write-Host "`n$path" -ForegroundColor Green
if (Test-Path $path) {
Get-ItemProperty $path -ErrorAction SilentlyContinue |
Format-List | Out-String
}
}
Write-Host "`n[3] SUSPICIOUS SERVICES (Users/Temp/AppData)" -ForegroundColor Yellow
Write-Host "───────────────────────────────────────────────────────────" -ForegroundColor DarkGray
Get-CimInstance Win32_Service -ErrorAction SilentlyContinue |
Where-Object {$_.PathName -match 'Users|Temp|AppData|Downloads'} |
Select-Object Name, DisplayName, PathName |
Format-Table -AutoSize
Write-Host "`n[4] UNSIGNED DRIVERS (требует админа)" -ForegroundColor Yellow
Write-Host "───────────────────────────────────────────────────────────" -ForegroundColor DarkGray
Get-CimInstance Win32_SystemDriver -ErrorAction SilentlyContinue |
Where-Object {$_.Signed -eq $false} |
Select-Object Name, DisplayName, PathName |
Format-Table -AutoSize
Write-Host "`n[5] SUSPICIOUS SCHEDULED TASKS" -ForegroundColor Yellow
Write-Host "───────────────────────────────────────────────────────────" -ForegroundColor DarkGray
Get-ScheduledTask -ErrorAction SilentlyContinue |
Where-Object {
$_.Actions.Execute -match 'powershell|cmd' -and
$_.Actions.Arguments -match '-enc|-w hidden|-ExecutionPolicy'
} |
Select-Object TaskName, TaskPath, State |
Format-Table -AutoSize
Write-Host "`n[6] WMI EVENT SUBSCRIPTIONS" -ForegroundColor Yellow
Write-Host "───────────────────────────────────────────────────────────" -ForegroundColor DarkGray
Get-CimInstance -Namespace root\subscription -ClassName __EventFilter -ErrorAction SilentlyContinue |
Select-Object Name, Query |
Format-List
Write-Host "`n═══════════════════════════════════════════════════════════" -ForegroundColor Gray
Write-Host "=== AUDIT COMPLETE ===" -ForegroundColor Green
Write-Host ""
Read-Host "`nНажмите Enter для выхода"
Запуск выполняется одной командой:
powershell -ExecutionPolicy Bypass -File .\Audit-Startup.ps1
Или просто со значка куда сохраняли .ps1
На рабочем столе появится текстовый файл с полным снимком автозагрузки. Его можно прогнать через VirusTotal, отправить коллегам или сохранить как эталонный снимок для сравнения в будущем.
Массовый аудит: проверяем весь домен
🌐 Удаленное выполнение на нескольких машинах (одна строка):
Invoke-Command -ComputerName PC01,PC02,PC03 -ScriptBlock { Get-CimInstance Win32_StartupCommand | Select-Object PSComputerName, Name, Command } | Format-Table -AutoSize
Заменяйте имена компьютеров на свои. Требует настроенного WinRM и прав администратора на целевых машинах. В корпоративной среде с Active Directory это стандартная практика.
Интерактив: найдите аномалию
Запустите прямо сейчас команду из раздела «Службы» — поиск подозрительных путей. Напишите в комментариях, что она вам показала. Уверен, у многих найдутся службы, ведущие в AppData или ProgramData — разберем самые интересные случаи в следующих постах.
Что дальше: связка с Autoruns
PowerShell дает скорость и автоматизацию, но ему не хватает визуальной наглядности и интеграции с VirusTotal «из коробки». Для точечного расследования конкретной записи, найденной скриптом, я рекомендую открывать Autoruns и изучать её в графическом интерфейсе. Эти два инструмента не конкурируют — они дополняют друг друга. Если вы еще не читали первую часть, начните с неё:
Резюме: автоматизация как основа безопасности
⚙️ PowerShell-аудит автозагрузки — это не замена графическим утилитам, а их мощное расширение. Однострочники позволяют за секунды получить срез системы, скрипты — автоматизировать регулярные проверки, а удаленное выполнение — масштабировать аудит на весь парк машин.
Все команды из этой статьи протестированы на Windows 10 (включая ESU) и Windows 11, на PowerShell 5.1 и 7.6. Они не требуют установки сторонних модулей и работают «из коробки». Сохраните их в заметки — пригодятся не раз.
👍 Если однострочники сэкономили вам время — ставьте лайк, подписывайтесь на канал и делитесь статьёй с коллегами-сисадминами. Пусть меньше систем виснет на ровном месте.
#powershell #windows11 #windows10 #автоматизация #sysadmin #настройкиwindows #системноеадминистрирование #безопасностьпк #скрипты #итинструменты #аудитсистемы #оптимизацияwindows #кибербезопасность #администрирование #win32 #cim #getciminstance #планировщикзаданий #реестрwindows #твикерwindows
✴️ Дорогие друзья. Если статья оказалась полезна, одна СТЕЛЛА от вас = мощная реклама для сотен людей. Поддержите контент, чтобы проблемы и решения находились быстрее! ✴️
С уважением. Александр, канал "Настройки Windows" на Яндекс.Дзен