Добавить в корзинуПозвонить
Найти в Дзене
Настройки Windows

PowerShell-аудит автозагрузки — однострочники для системного инженера (Для подписчиков)

⚡ У вас нет под рукой GUI? Нужно за 30 секунд проверить десять машин в домене? Или вы принципиально не доверяете графическим утилитам и хотите видеть сырые данные из недр Windows? Добро пожаловать в мир PowerShell-аудита. Графические инструменты вроде Autoruns великолепны для точечной работы. Но в арсенале системного инженера 2026 года должен быть и другой подход — скриптовый. PowerShell дает то, чего не даст ни один GUI: воспроизводимость, автоматизацию, массовое применение и прозрачность каждого запроса к системе. 🛠 Подписывайтесь на канал «Настройки Windows» — здесь мы разбираем ОС без маркетинговой шелухи и даем только рабочие технические решения. 🛡️ ВЗНОС В РАЗВИТИЕ КАНАЛА И СОЗДАНИЕ ПОЛЕЗНЫХ СКРИПТОВ 🛡️ Сегодня соберем набор универсальных однострочников и один полноценный скрипт, которые превратят PowerShell в мощный сканер автозагрузки. Всё нижеперечисленное работает на Windows 10 (включая ESU) и Windows 11, на PowerShell 5.1 и PowerShell 7.6. 🎯 Все команды используют CIM-ин
Оглавление

⚡ У вас нет под рукой 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
-2

Эта команда собирает данные из реестра Run, RunOnce, папки Startup и некоторых других источников. Быстро, надежно, универсально.

🔑 Прямое чтение веток Run из реестра (одна строка):

Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Run','HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Run' -ErrorAction SilentlyContinue | Format-List
-3

Этот запрос дает «сырой» срез реестра без фильтрации. Полезно, когда нужно увидеть абсолютно всё, включая записи, которые 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
-4

Службы: ищем аномальные пути

🔎 Службы с подозрительными путями запуска (одна строка):

Get-CimInstance Win32_Service | Where-Object {$_.PathName -match 'Users|Temp|AppData|Downloads'} | Select-Object Name, DisplayName, PathName, StartMode | Format-Table -AutoSize
-5

Легитимные системные службы живут в C:\Windows\System32\. Если путь ведет в пользовательские папки — это повод для расследования.

⚙️ Автоматические службы в остановленном состоянии (одна строка):

Get-Service | Where-Object {$_.StartType -eq 'Automatic' -and $_.Status -eq 'Stopped'} | Select-Object Name, DisplayName, Status | Format-Table -AutoSize
-6

Показывает службы, которые должны работать, но по какой-то причине остановлены. Это может быть как сбой, так и намеренное отключение вредоносным ПО конкурента.

Драйверы: контроль ядра

🧪 Драйверы без цифровой подписи (требует прав администратора, одна строка):

Get-CimInstance Win32_SystemDriver | Where-Object {$_.Signed -eq $false} | Select-Object Name, DisplayName, PathName, State | Format-Table -AutoSize
-7

В 2026 году неподписанный драйвер в ядре — это либо руткит, либо серьезная поломка системы. Любая такая запись требует немедленного разбора.

🛡️ Драйверы со сторонних путей (одна строка):

Get-CimInstance Win32_SystemDriver | Where-Object {$_.PathName -notmatch 'Windows\\System32|Windows\\SysWOW64'} | Select-Object Name, DisplayName, PathName | Format-Table -AutoSize
-8

Показывает все драйверы, которые физически лежат вне системных папок. Полезно для выявления 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
-9

Триггеры -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
-10

Продвинутый уровень: WMI-подписки и COM

🕸️ WMI Event Subscriptions — скрытый механизм персистентности (одна строка):

Get-CimInstance -Namespace root\subscription -ClassName __EventFilter -ErrorAction SilentlyContinue | Select-Object Name, Query, Creator | Format-List
-11

WMI-подписки позволяют запускать код в ответ на системные события. Это излюбленный инструмент продвинутых APT-группировок, потому что такие записи не видны в классических вкладках автозагрузки.

-12

💳 Донат через 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
-13

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 для выхода"
-14

Запуск выполняется одной командой:

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" на Яндекс.Дзен

СКРИПТЫ | Настройки Windows | Дзен