Как найти, почистить и автоматизировать «мешки настроек», которые помнят всё о ваших папках
Привет, друг! 👋 Сегодня поговорим о том, о чём молчат 99% пользователей Windows, но знают все, кто работает с реестром, безопасностью или автоматизацией. Речь о ShellBags — невидимых хранителях истории ваших папок.
Вы когда-нибудь замечали, что Проводник «помнит», как вы любили смотреть файлы в режиме «Таблица» с сортировкой по дате? Или что после удаления папки её следы всё ещё всплывают в поиске? Это не магия. Это ShellBags.
В этой статье я собрал всё: от пошаговой инструкции для школьника до готовых скриптов для DevOps. Проверил каждую команду на актуальность для Windows 11 и PowerShell (май 2026). Без воды, с эмодзи и живым языком. Поехали! 🚀
🔍 Что такое ShellBags и почему вам стоит об этом знать
ShellBags — это механизм Windows, который сохраняет настройки отображения папок: размер окна, вид иконок, сортировку, положение панелей. Казалось бы, мелочь. Но есть нюанс.
Эти «мешки» хранят не только визуальные предпочтения. Они фиксируют:
✨ Полный путь к папке — даже если вы её уже удалили
✨ Даты доступа — когда вы впервые и последний раз открывали каталог
✨ Пользователя — чья учётка использовала эти настройки
✨ Сетевые пути — включая UNC, OneDrive и даже WSL
Для обычного пользователя это просто удобство. Для специалиста по безопасности — золотая жила для расследований. Для администратора — источник проблем в VDI. Для разработчика — артефакт, мешающий чистоте тестовых сред.
💡 Факт: Структура ShellBags не менялась с Windows XP. Пути в реестре актуальны и в Windows 11 26H1.
🧭 Для кого эта статья
👤 Новичок: хотите почистить реестр без риска сломать систему? Есть пошаговый раздел с скриншотами и проверенными утилитами.
🖥️ Сисадмин: боретесь с «фантомными» настройками в роуминг-профилях? Найдёте решения для GPO, FSLogix и Citrix.
💻 DevOps / Разработчик: нужна автоматизация очистки в CI/CD? Готовые скрипты для PowerShell, Terraform и Ansible уже ждут.
🕵️ Специалист по безопасности: интересует криминалистический анализ? Разбор артефактов, корреляция с LNK и USN Journal — в отдельном блоке.
⚖️ Комплаенс / Юрист: беспокоитесь о GDPR и утечках метаданных? Есть чек-лист соответствия стандартам.
🧒 Часть 1: Для абсолютных новичков — безопасно и просто
Начнём с самого важного: не бойтесь реестра, но уважайте его. Все шаги ниже безопасны, если делать точно по инструкции.
📋 Правило №1: всегда делайте бэкап
Прежде чем что-то менять, сохраните текущее состояние:
- Нажмите Win + R, введите regedit, нажмите Enter
- В меню выберите Файл → Экспорт
- Укажите «Все» в диапазоне, сохраните как backup_дата.reg
- Готово — теперь у вас есть точка возврата
🔎 Где искать ShellBags
Откройте редактор реестра и перейдите по пути:
HKEY_CURRENT_USER\Software\Microsoft\Windows\Shell
Там вы увидите две ключевые папки:
📦 BagMRU — список недавно открытых папок
🎨 Bags — настройки отображения для каждой из них
Повторите поиск для второго пути:
HKEY_CURRENT_USER\Software\Classes\Local Settings\Software\Microsoft\Windows\Shell
🧹 Как почистить без риска: два надёжных способа
Способ А: через NirSoft ShellBagsView (рекомендую)
- Скачайте утилиту с официального сайта: nirsoft.net
- Распакуйте, запустите ShellBagsView.exe
- Программа сама просканирует реестр
- Чтобы сохранить отчёт: File → Save Selected Items → CSV
- Чтобы очистить: Edit → Delete Selected ShellBags
✅ Плюсы: наглядно, безопасно, есть экспорт
❌ Минусы: только для текущего пользователя
Способ Б: через BleachBit (бесплатно, открыто)
- Установите с bleachbit.org
- Запустите от имени администратора
- В левой панели: Windows → отметьте ShellBags
- Нажмите Предпросмотр → убедитесь, что выбрано только нужное
- Нажмите Очистить
✅ Плюсы: кроссплатформенно, есть консольный режим
❌ Минусы: меньше деталей, чем в специализированных утилитах
🔄 После очистки: перезапустите Проводник
Чтобы изменения вступили в силу:
- Откройте Диспетчер задач (Ctrl + Shift + Esc)
- Найдите процесс Проводник
- Нажмите правой кнопкой → Перезапустить
Или через консоль:
- Stop-Process -Name explorer -Force
- Start-Sleep -Seconds 2
- Start-Process explorer
✅ Как проверить, что всё работает
- Откройте любую папку, смените вид на «Список»
- Закройте и снова откройте — вид должен сохраниться
- Запустите ShellBagsView — старые записи исчезли, новая появилась
- Проводник не падает, не тормозит — успех! 🎉
🚫 Чего делать не стоит
❌ Не удаляйте ключ Shell целиком — только Bags и BagMRU внутри
❌ Не используйте «универсальные чистильщики реестра» — они могут сломать систему
❌ Не очищайте на рабочем сервере без окна обслуживания
❌ Не забывайте про бэкап — это ваше спасение
⚙️ Часть 2: Архитектура — как это работает внутри
Теперь чуть глубже. Без паники, объясняю на пальцах.
🗂️ Два ключа, одна система
ShellBags живут в двух связанных ветках реестра:
📦 BagMRU — это «список покупок»: хранит пути к папкам в порядке доступа (Most Recently Used). Каждый элемент содержит NodeSlot — номер, который ссылается на настройки в другом ключе.
🎨 Bags — это «шкаф с настройками»: по номеру NodeSlot хранит параметры вида — размер окна, сортировку, вид иконок, положение колонок.
🔗 Как они общаются
Представьте, что вы открыли папку C:\Projects\Alpha:
- Windows вычисляет уникальный идентификатор папки (путь + дата + пользователь)
- В BagMRU создаётся запись с NodeSlot = 5
- В Bags\5 сохраняются ваши настройки вида
- При следующем открытии система читает Bags\5 и применяет всё как было
Просто? Да. Эффективно? Очень.
🕰️ Что ещё хранится в ShellBags
Помимо пути и настроек вида, в записях есть:
✨ LastWriteTime — когда папка менялась в последний раз
✨ Flags — отображались ли скрытые файлы, сетевой статус
✨ SortColumn и SortDirection — по какой колонке и как сортировали
✨ WindowPosition — координаты и размер окна Проводника
✨ IconSize и ViewMode — размер значков и режим просмотра
🔍 Для криминалистов: даже если папка удалена, ShellBags часто сохраняют её путь и дату последнего просмотра. Это помогает восстановить историю доступа.
🌐 Сетевые пути и облака
Не все пути ведут в C:\. Вот как ShellBags работают с разными типами:
✨ C:\Users\... — полное сохранение, всё работает как часы
✨ \\SERVER\Share\... — сохраняются, но могут дублироваться при смене буквы диска
✨ OneDrive:\... — записываются как виртуальные пути, возможны конфликты при синхронизации
✨ \\wsl$\... — частично поддерживаются, могут содержать артефакты Linux-путей
🔗 С чем ещё коррелировать
ShellBags — не единственный артефакт. Для полной картины сравнивайте с:
✨ RecentDocs — список недавно открытых файлов
✨ LNK-файлы — ярлыки в %APPDATA%\Microsoft\Windows\Recent
✨ Jump Lists — меню «Недавние» в панели задач
✨ USN Journal — журнал изменений NTFS
✨ Prefetch — данные о запуске программ
⚠️ Важно: наличие папки в ShellBags не доказывает, что пользователь открывал файлы внутри. Он мог просто зайти и выйти. Всегда перекрёстно проверяйте данные.
🧩 Часть 3: Нестандартные проблемы — и как их решать
Здесь — реальные кейсы, с которыми сталкиваются инженеры. Без теории, только практика.
🧩 Проблема: Проводник падает после обновления Windows
Симптомы: открываете любую папку — explorer.exe вылетает с ошибкой 0xc0000005. Настройки вида сбрасываются.
Причина: после мажорного обновления (например, 24H2 → 25H2) структура бинарных данных в реестре может не совпадать со старой.
Решение: очистите ключи и дайте Windows пересоздать их с нуля.
Remove-Item "HKCU:\Software\Microsoft\Windows\Shell\BagMRU" -Recurse -Force
Remove-Item "HKCU:\Software\Microsoft\Windows\Shell\Bags" -Recurse -Force
Remove-Item "HKCU:\Software\Classes\Local Settings\Software\Microsoft\Windows\Shell\BagMRU" -Recurse -Force
Remove-Item "HKCU:\Software\Classes\Local Settings\Software\Microsoft\Windows\Shell\Bags" -Recurse -Force
После: перезагрузитесь. Система создаст чистые ключи.
Профилактика: перед крупными обновлениями экспортируйте ветки Shell в .reg-файл.
🧩 Проблема: настройки «мигрируют» между пользователями в VDI
Симптомы: в роуминг-профилях или FSLogix настройки папок одного пользователя появляются у другого. Вход в систему замедляется.
Причина: ShellBags синхронизируются как часть профиля, но содержат машинно-зависимые данные (оконные позиции, сетевые пути).
Решение: исключите ветки из синхронизации через групповые политики.
- Откройте Group Policy Management
- Перейдите: User Configuration → Administrative Templates → System → User Profiles
- Включите Exclude directories in roaming profile
- Добавьте пути:
Software\Microsoft\Windows\Shell\Bags
Software\Microsoft\Windows\Shell\BagMRU
Software\Classes\Local Settings\Software\Microsoft\Windows\Shell\Bags
Software\Classes\Local Settings\Software\Microsoft\Windows\Shell\BagMRU
Дополнительно: для FSLogix используйте ProfileType=1 (виртуальный диск) + IsDynamic=1.
🧩 Проблема: «фантомные» пути от OneDrive Files On-Demand
Симптомы: в ShellBags появляются пути вроде C:\Users\X\OneDrive\Archive\2023, но папок физически нет — только placeholder'ы.
Причина: Проводник регистрирует виртуальные пути при навигации, даже если файлы не загружены на диск.
Решение:
- Временно отключите кеширование метаданных:
Set-ItemProperty -Path "HKCU:\Software\Microsoft\OneDrive" -Name "EnableFilesOnDemand" -Value 0
- Очистите ShellBags через утилиту
- Проверьте реальное состояние:
Get-ChildItem -Path $env:USERPROFILE\OneDrive -Recurse -Force
- При необходимости верните настройку обратно
🧩 Проблема: Проводник тормозит при 5000+ записей
Симптомы: открытие любой папки занимает 3-5 секунд, explorer.exe грузит процессор.
Причина: линейный поиск в BagMRU, отсутствие индексации, фрагментация бинарных данных.
Решение:
- Ограничьте размер списка:
New-ItemProperty -Path "HKCU:\Software\Classes\Local Settings\Software\Microsoft\Windows\Shell" -Name "BagMRU Size" -Value 1000 -PropertyType DWORD -Force
- Очистите старые записи (старше 90 дней) через ShellBag Analyzer
- Дефрагментируйте NTUSER.DAT (утилита contig из Sysinternals)
- Включите отключение истории недавних документов:
New-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer" -Name "NoRecentDocsHistory" -Value 1 -PropertyType DWORD -Force
--------------
✅ ПОДПИСКА, ❤️ ЛАЙК, 🔄 РЕПОСТ друзьям, 💰 ДОНАТ на сбер по QR 👇
💰ПОДДЕРЖКА АВТОРА КАНАЛА КОПЕЙКОЙ - ДЕЛО ДОБРОВОЛЬНОЕ💰
🧩 Проблема: WSL2 и перекрёстные пути
Симптомы: пути \\wsl$\Ubuntu\home\user\project дублируются, настройки вида не применяются, ошибки доступа.
Причина: Windows транслирует Linux-пути в UNC, но метаданные оболочки не синхронизируются с 9p-сервером.
Решение:
- Используйте wslpath для корректного маппинга:
wslpath -w /home/user/project
- Открывайте папки через wslview или open вместо прямого доступа через \\wsl$
- Для разработки используйте VS Code Remote-WSL — он обходит Проводник
- При необходимости ограничьте навигацию через \\wsl$ в групповых политиках
💻 Часть 4: Для разработчиков и DevOps — автоматизация и интеграция
Теперь — код. Проверенный, рабочий, с комментариями. Все скрипты протестированы на Windows 11 24H2/25H2 и PowerShell 7.6.
🤖 Экспорт ShellBags в CSV — для анализа
$exportPath = "$env:TEMP\ShellBags_Export_$(Get-Date -Format 'yyyyMMdd_HHmmss').csv"
$paths = @(
"HKCU:\Software\Microsoft\Windows\Shell\BagMRU",
"HKCU:\Software\Classes\Local Settings\Software\Microsoft\Windows\Shell\BagMRU"
)
$results = foreach ($p in $paths) {
if (Test-Path $p) {
Get-ChildItem $p -Recurse -ErrorAction SilentlyContinue |
Select-Object PSPath, Name,
@{N='LastWrite';E={$_.GetValue('LastWriteTime')}},
@{N='IsMRU';E={$_.GetValue('MRUListEx') -ne $null}}
}
}
$results | Export-Csv $exportPath -NoTypeInformation -Encoding UTF8
Write-Host "✅ Экспорт завершён: $exportPath" -ForegroundColor Green
🧹 Универсальная функция очистки — с логированием и перезапуском
function Clear-ShellBags {
[CmdletBinding(SupportsShouldProcess)]
param(
[switch]$Force,
[switch]$RestartExplorer
)
$keys = @(
"HKCU:\Software\Microsoft\Windows\Shell\BagMRU",
"HKCU:\Software\Microsoft\Windows\Shell\Bags",
"HKCU:\Software\Classes\Local Settings\Software\Microsoft\Windows\Shell\BagMRU",
"HKCU:\Software\Classes\Local Settings\Software\Microsoft\Windows\Shell\Bags"
)
$log = "$env:TEMP\ShellBag_Clean_$(Get-Date -Format 'yyyyMMdd_HHmmss').log"
foreach ($k in $keys) {
if (Test-Path $k) {
$msg = "[INFO] Processing: $k"
Write-Output $msg | Tee-Object -FilePath $log -Append
if ($PSCmdlet.ShouldProcess($k, "Remove recursively")) {
try {
Remove-Item $k -Recurse -Force -ErrorAction Stop
New-Item $k -Force -ErrorAction SilentlyContinue | Out-Null
Write-Output "[OK] Cleaned: $k" | Tee-Object -FilePath $log -Append
}
catch {
Write-Output "[ERROR] $($_.Exception.Message)" | Tee-Object -FilePath $log -Append
}
}
}
}
if ($RestartExplorer) {
Write-Output "[INFO] Restarting Explorer..." | Tee-Object -FilePath $log -Append
Stop-Process -Name explorer -Force -ErrorAction SilentlyContinue
Start-Sleep -Seconds 2
Start-Process explorer -ErrorAction SilentlyContinue
}
Write-Output "[SUCCESS] Operation completed. Log: $log"
}
# Использование:
Clear-ShellBags -RestartExplorer
💡 Совет: запускайте скрипт от имени администратора — в Windows 11 24H2+ усилен контроль доступа к реестру.
🛡️ Защита ключей от записи — для compliance и anti-forensics
$registryKeyPath = "HKCU:\Software\Classes\Local Settings\Software\Microsoft\Windows\Shell\BagMRU"
if (Test-Path $registryKeyPath) {
$acl = Get-Acl -Path $registryKeyPath
$denyWrite = New-Object System.Security.AccessControl.RegistryAccessRule(
"Users",
[System.Security.AccessControl.RegistryRights]::SetValue,
[System.Security.AccessControl.AccessControlType]::Deny
)
$acl.SetAccessRule($denyWrite)
Set-Acl -Path $registryKeyPath -AclObject $acl
Write-Host "🔒 Доступ на запись ограничен для: $registryKeyPath" -ForegroundColor Yellow
}
⚠️ Важно: эта настройка применяется только к текущему пользователю. Для корпоративных сред используйте Group Policy или Intune OMA-URI.
📊 Мониторинг размера BagMRU — для SIEM и алертинга
$logName = "Application"
$source = "ShellBagMonitor"
$threshold = 4000
if (![System.Diagnostics.EventLog]::SourceExists($source)) {
New-EventLog -LogName $logName -Source $source -ErrorAction SilentlyContinue
}
$bagPath = "HKCU:\Software\Microsoft\Windows\Shell\BagMRU"
if (Test-Path $bagPath) {
$count = (Get-ChildItem $bagPath -ErrorAction SilentlyContinue).Count
if ($count -gt $threshold) {
$message = "ShellBagMRU count: $count (threshold: $threshold). Review recommended."
if ($PSVersionTable.PSVersion.Major -le 5) {
Write-EventLog -LogName $logName -Source $source -EventId 1001 -EntryType Warning -Message $message
}
else {
Write-Host "⚠️ $message" -ForegroundColor Yellow
}
}
}
🌐 Интеграция в IaC: Terraform и Ansible
Terraform (актуальный синтаксис)
resource "null_resource" "clean_shellbags" {
provisioner "local-exec" {
interpreter = ["PowerShell", "-NoProfile", "-ExecutionPolicy", "Bypass", "-Command"]
command = <<-EOT
$keys = @(
'HKCU:\\Software\\Microsoft\\Windows\\Shell\\BagMRU',
'HKCU:\\Software\\Microsoft\\Windows\\Shell\\Bags'
)
foreach ($k in $keys) {
if (Test-Path $k) {
Remove-Item $k -Recurse -Force
New-Item $k -Force | Out-Null
}
}
Stop-Process -Name explorer -Force -ErrorAction SilentlyContinue
Start-Sleep -Seconds 2
Start-Process explorer
EOT
}
triggers = {
rotation = timestamp()
}
}
Ansible (Windows module)
- name: Clear ShellBags for baseline image
win_shell: |
$keys = @(
'HKCU:\Software\Microsoft\Windows\Shell\BagMRU',
'HKCU:\Software\Microsoft\Windows\Shell\Bags'
)
foreach ($k in $keys) {
if (Test-Path $k) {
Remove-Item $k -Recurse -Force
New-Item $k -Force | Out-Null
}
}
args:
executable: powershell
register: cleanup_result
- name: Restart Explorer if needed
win_shell: |
Stop-Process -Name explorer -Force -ErrorAction SilentlyContinue
Start-Sleep -Seconds 2
Start-Process explorer
when: cleanup_result.changed
🛡️ Часть 5: Приватность, криминалистика, соответствие стандартам
Теперь — про безопасность и регуляторику. Без паники, но с пониманием рисков.
🕵️ Что можно узнать из ShellBags
✨ Path — куда заходил пользователь → восстановление маршрута, поиск скрытых каталогов
✨ LastWrite — дата изменения папки → построение временной шкалы
✨ NodeSlot — связь с настройками вида → подтверждение намеренного просмотра
✨ Flags — режим отображения → попытка скрыть/показать системные файлы
⚖️ Соответствие стандартам
✨ GDPR (ст. 17): путь к персональной папке в ShellBags = персональные данные. Требуют очистки по запросу на удаление.
✨ ISO 27001 (A.8.2): включите ShellBags в политику очистки носителей перед утилизацией.
✨ SOC 2 Type II: мониторинг изменений в реестре помогает обнаруживать аномалии доступа.
✨ HIPAA: пути к медицинским архивам в ShellBags = потенциальный риск утечки PHI.
🛡️ Anti-Forensics: что работает
✨ Очистка через специализированные утилиты — высокая эффективность, но оставляет артефакты в USN/Journal
✨ Перезапись NTUSER.DAT нулями — полная очистка, но разрушает профиль, требует восстановления
✨ Запрет записи через ACL — отличная профилактика, не удаляет существующее, блокирует новое
✨ Навигация через cmd/PowerShell вместо Проводника — ShellBags не записываются при работе без GUI
🔍 Рекомендация: никогда не полагайтесь только на ShellBags. Всегда коррелируйте с LNK, Recent, Prefetch, Amcache, UsrClass.dat и Event Log 4663.
📋 Часть 6: Чек-листы — чтобы ничего не забыть
✅ Перед очисткой
✔️ Создан бэкап реестра (.reg)
✔️ Закрыты все окна Проводника
✔️ Отключена синхронизация OneDrive/FSLogix (если применимо)
✔️ Выбран инструмент (GUI / PowerShell / GPO)
✔️ Проведён тест на неважном профиле или ВМ
✅ После очистки
✔️ Проводник перезапущен
✔️ Новые папки сохраняют настройки вида
✔️ В утилите анализа остались только свежие записи
✔️ В логах нет ошибок explorer.exe
✔️ Профиль пользователя загружается без задержек
🏢 Для enterprise-развёртывания
✔️ GPO/Intune для ограничения BagMRU Size
✔️ Исключение из Roaming Profiles
✔️ Скрипт очистки в логон/логофф
✔️ Мониторинг через SIEM/WMI
✔️ Документирование в политике управления конфигурациями
💻 Для разработчиков
✔️ Скрипт очистки в setup/teardown тестов
✔️ Исключение веток в Dockerfile/WSL провиженах
✔️ Валидация в CI/CD pipeline
✔️ Журналирование изменений реестра
✔️ Соответствие внутренним security baseline
🎯 Заключение: чистота — это осознанность
ShellBags — яркий пример того, как удобная фича для пользователя становится сложным артефактом для администратора, разработчика или специалиста по безопасности.
✨ Пользователю они дают комфорт: Проводник помнит ваши предпочтения.
✨ Администратору — головную боль: настройки «мигрируют», профили раздуваются.
✨ DevOps-инженеру — вызов: как автоматизировать очистку в сотнях сред.
✨ Криминалисту — возможность: восстановить цепочку доступа к файлам.
Главный принцип: не удаляйте слепо, очищайте осознанно. Всегда сохраняйте бэкапы, тестируйте в изоляции, документируйте изменения и коррелируйте данные с другими артефактами системы.
🛡️ Помните: чистая система — не та, где ничего не записывается, а та, где записывается только то, что необходимо, и только до тех пор, пока это нужно.
💬 Понравилась статья? Подписывайтесь на канал — каждую неделю разбираем сложные технические темы простым языком. Ставьте 👍, если материал был полезен, и делитесь в комментариях: сталкивались ли вы с «фантомными» папками или зависаниями Проводника? Ваш опыт поможет другим! 👇
#ShellBags #Windows #PowerShell #Реестр #DevOps #Автоматизация #ИнформационнаяБезопасность #DFIR #СистемноеАдминистрирование #Windows11 #PowerShell7 #Администрирование #Кибербезопасность #ИТинфраструктура #Оптимизация #ЧисткаСистемы #Проводник #Registry #BagMRU #NTUSERDAT #UAC #AdministratorProtection #CI_CD #Terraform #Ansible #Forensics #GDPR #Compliance #TechBlog #ИТновости