Главный принцип: Эти методы предназначены исключительно для вашего личного компьютера, контроль над которым полностью принадлежит вам.
⚠️ ВАЖНОЕ ПРЕДУПРЕЖДЕНИЕ ПЕРЕД НАЧАЛОМ (Теперь без этого никак, если пишешь что то серьёзное, терпите, закон есть закон)
Пожалуйста, прочтите этот раздел целиком, прежде чем запускать какие-либо скрипты или редактировать реестр. Эта статья — не инструкция для начинающих, а продвинутый инструмент для глубокой настройки системы!!!
🚨 Критичные риски и ответственность:
🛡️ Обязательные меры предосторожности
Прежде чем следовать инструкциям ниже, выполните три пункта:
- Создайте точку восстановления системы (Панель управления → Восстановление → Настройка восстановления системы → Создать).
- Выполните полный бэкап важных данных на внешний носитель.
- Убедитесь, что вы вошли в систему с учётной записью Администратора.
📱 Рекомендуемый путь: от простого к сложному
Не стоит сразу бросаться в глубины реестра. Я рекомендую действовать поэтапно:
Этап 1: Встроенные средства Windows (Безопасно, для всех)
Попробуйте сначала стандартные методы, которые не могут навредить системе:
- Очистите историю проводника: Параметры → Конфиденциальность и защита → Журнал действий → Очистить.
- Используйте Очистку диска (cleanmgr.exe): отметьте «Временные файлы», «Эскизы», «Временные файлы Интернета».
- Вручную очистите папки «Загрузки» и «Рабочий стол» от ненужных файлов.
Этап 2: Использование USBOblivion (Продвинутый уровень)
Если встроенных средств недостаточно, переходите к проверенной утилите USBOblivion, как описано в Части 3. Всегда запускайте её сначала в режиме симуляции (/simulate).
Этап 3: Мои скрипты и ручная чистка реестра (Экспертный уровень)
Представленные в статье скрипты — это тяжёлая артиллерия для эстетов, созданная в результате месяца экспериментов. Используйте их, если:
- Вам нужна полная, гарантированная очистка всех цифровых следов.
- Вы понимаете, как читать логи и восстанавливаться из бэкапа.
- Вы осознаёте все перечисленные выше риски и приняли их.
Если вы прочитали это предупреждение, осознали риски и подготовились — добро пожаловать в мир полного контроля над вашей цифровой тенью.
Начинаем разговор:
Всё началось с простой ситуации, которая, наверное, случалась с каждым. Мне нужно было передать другу архив фотографий с праздника. Я скачал фото с телефона на флешку, отдал другу, а через неделю... увидел эти же фотографии в истории проводника на своём рабочем компьютере. Windows запомнила не только то, что я подключал флешку, но и все файлы, которые на ней были! 😱
В тот момент я осознал: моя цифровая приватность — это иллюзия. И решил разобраться, как заставить Windows забывать всё, что я не хочу, чтобы она помнила. Месяц проб, ошибок, пары переустановок системы и десятков скриптов позже — я готов поделиться с вами полным руководством. Не теорией из интернета, а тем, что реально работает на моём компьютере прямо сейчас.
📌 Часть 1: Разбираемся, что именно Windows о нас помнит
Перед тем как что-то чистить, нужно понять масштаб проблемы. Я сидел три вечера с блокнотом и записывал ВСЕ места, где система хранит информацию о USB-накопителях. Вот что у меня получилось:
Места хранения следов (от самых очевидных к самым скрытым):
1. Реестр Windows — главная база данных:
- HKLM\SYSTEM\CurrentControlSet\Enum\USBSTOR — здесь лежат паспортные данные каждой флешки
- HKLM\SYSTEM\MountedDevices — история, какие буквы дисков каким устройствам назначались
- HKLM\SYSTEM\CurrentControlSet\Control\DeviceClasses — технические ссылки (самое коварное место!)
- HKLM\SYSTEM\CurrentControlSet\Enum\USB — информация о USB-портах
2. Файловая система:
- C:\Users\[Ваше имя]\AppData\Roaming\Microsoft\Windows\Recent — ярлыки последних открытых файлов
- C:\Users\[Ваше имя]\AppData\Local\Microsoft\Windows\Explorer — кэш иконок и превью
- C:\Windows\Prefetch — информация для ускорения запуска программ
3. Журналы событий:
- Журнал "Microsoft-Windows-DriverFrameworks-UserMode/Operational"
- Журнал "Microsoft-Windows-Kernel-PnP/Configuration"
4. Скрытые кэши:
- Кэш эскизов изображений
- История автозаполнения проводника
- Кэш библиотек Windows
🔍 Часть 2: Первый шаг — узнаём "личность" флешки
Каждая флешка имеет уникальный серийный номер. Это как отпечатки пальцев в цифровом мире. Windows использует этот номер для идентификации. Вот как его узнать — три разных способа, которые я проверял лично:
Способ 1: Через PowerShell (самый точный)
# Открываем PowerShell от администратора и вводим:
$driveLetter = Read-Host "Введите букву флешки (например, E:)"
$volume = Get-WmiObject Win32_Volume | Where-Object { $_.DriveLetter -eq $driveLetter }
if ($volume) {
Write-Host "Серийный номер: $($volume.SerialNumber)" -ForegroundColor Green
Write-Host "Метка тома: $($volume.Label)" -ForegroundColor Yellow
Write-Host "Файловая система: $($volume.FileSystem)" -ForegroundColor Cyan
} else {
Write-Host "Флешка не найдена!" -ForegroundColor Red
}
Способ 2: Через командную строку (быстрый)
diskpart
list volume
exit
Способ 3: Через скрипт с сохранением в файл
# save_usb_info.ps1
$usbDrives = Get-WmiObject Win32_Volume | Where-Object { $_.DriveType -eq 2 }
$reportPath = "$env:USERPROFILE\Desktop\USB_Report_$(Get-Date -Format 'yyyyMMdd_HHmm').txt"
"Отчёт о подключённых USB-накопителях" | Out-File $reportPath
"Сформирован: $(Get-Date)" | Out-File $reportPath -Append
"=" * 50 | Out-File $reportPath -Append
foreach ($drive in $usbDrives) {
"Буква диска: $($drive.DriveLetter)" | Out-File $reportPath -Append
"Серийный номер: $($drive.SerialNumber)" | Out-File $reportPath -Append
"Метка: $($drive.Label)" | Out-File $reportPath -Append
"Размер: $([math]::Round($drive.Capacity / 1GB, 2)) GB" | Out-File $reportPath -Append
"Свободно: $([math]::Round($drive.FreeSpace / 1GB, 2)) GB" | Out-File $reportPath -Append
"-" * 30 | Out-File $reportPath -Append
}
Write-Host "Отчёт сохранён: $reportPath" -ForegroundColor Green
Мой совет: используйте первый способ и обязательно записывайте серийный номер. Потом с его помощью вы сможете проверить, удалились ли все следы.
🛡️ Часть 3: USBOblivion — мой первый и главный инструмент
После недели экспериментов с ручной чисткой реестра я понял: нужно что-то автоматизированное. USBOblivion — бесплатная утилита, которая делает 80% работы. Но! Важно использовать её правильно.
Мой пошаговый гайд по USBOblivion:
- Скачивание: только с официального сайта (www.cherubicsoft.com/projects/usboblivion)
- Подготовка: создайте папку C:\SecurityTools\ и распакуйте туда архив
- Первый запуск: обязательно от имени администратора!
- Настройка: поставьте галочки:
Режим симуляции (сначала тест!)
Сохранить reg-файл отмены
Только активные устройства (по ситуации)
Мой авторский скрипт для безопасного использования USBOblivion:
# safe_usboblivion_launcher.ps1
# Авторский скрипт для максимально безопасного использования USBOblivion
param(
[string]$Mode = "simulate", # simulate или clean
[switch]$Force
)
# Конфигурация
$USBOblivionPath = "C:\SecurityTools\USBOblivion\USBOblivion.exe"
$BackupDir = "C:\USB_History_Backup\$(Get-Date -Format 'yyyy-MM-dd_HH-mm')"
$LogFile = "$env:TEMP\usb_cleanup_log.txt"
# Проверка прав администратора
function Test-Administrator {
$currentUser = New-Object Security.Principal.WindowsPrincipal([Security.Principal.WindowsIdentity]::GetCurrent())
return $currentUser.IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)
}
# Создание резервной копии реестра
function Backup-Registry {
Write-Host "Создаю резервные копии реестра..." -ForegroundColor Yellow
New-Item -ItemType Directory -Path $BackupDir -Force | Out-Null
$registryPaths = @(
"HKLM\SYSTEM\CurrentControlSet\Enum\USBSTOR",
"HKLM\SYSTEM\MountedDevices",
"HKLM\SYSTEM\CurrentControlSet\Control\DeviceClasses",
"HKLM\SYSTEM\CurrentControlSet\Enum\USB",
"HKLM\SOFTWARE\Microsoft\Windows Portable Devices"
)
$backupCount = 0
foreach ($path in $registryPaths) {
$fileName = $path.Replace("\", "_").Replace(":", "") + ".reg"
$fullPath = Join-Path $BackupDir $fileName
try {
# Пытаемся экспортировать раздел реестра
Start-Process -FilePath "reg.exe" -ArgumentList "export `"$path`" `"$fullPath`" /y" -Wait -NoNewWindow
if (Test-Path $fullPath) {
Write-Host " ✓ $path" -ForegroundColor Green
$backupCount++
}
} catch {
Write-Host " ✗ $path (не удалось создать бэкап)" -ForegroundColor DarkGray
}
}
return $backupCount
}
# Основной процесс
Clear-Host
Write-Host "=== БЕЗОПАСНЫЙ ЗАПУСК USBOBLIVION ===" -ForegroundColor Cyan
Write-Host "Версия скрипта: 2.1" -ForegroundColor Gray
Write-Host ""
# Проверка прав
if (-not (Test-Administrator)) {
Write-Host "ОШИБКА: Запустите скрипт от имени Администратора!" -ForegroundColor Red
Write-Host "Правой кнопкой по PowerShell → 'Запустить от имени администратора'" -ForegroundColor Yellow
pause
exit 1
}
# Проверка наличия USBOblivion
if (-not (Test-Path $USBOblivionPath)) {
Write-Host "USBOblivion не найден по пути:" -ForegroundColor Red
Write-Host " $USBOblivionPath" -ForegroundColor Yellow
Write-Host ""
Write-Host "Скачайте с официального сайта:" -ForegroundColor Cyan
Write-Host " https://www.cherubicsoft.com/projects/usboblivion" -ForegroundColor Blue
Write-Host "И распакуйте в указанную папку" -ForegroundColor Cyan
pause
exit 1
}
# Предупреждение
Write-Host "ВНИМАНИЕ: Эта операция удалит историю USB-устройств!" -ForegroundColor Red
Write-Host "Создам точку восстановления и бэкапы реестра." -ForegroundColor Yellow
if (-not $Force) {
$confirm = Read-Host "`nПродолжить? (да/нет)"
if ($confirm -ne 'да') {
Write-Host "Отменено пользователем." -ForegroundColor Yellow
exit 0
}
}
# Шаг 1: Создание точки восстановления
Write-Host "`n[1/4] Создаю точку восстановления системы..." -ForegroundColor Cyan
try {
Checkpoint-Computer -Description "Перед очисткой истории USB устройств" -RestorePointType "MODIFY_SETTINGS"
Write-Host " ✓ Точка восстановления создана" -ForegroundColor Green
} catch {
Write-Host " ⚠ Не удалось создать точку восстановления" -ForegroundColor Yellow
}
# Шаг 2: Создание бэкапов реестра
Write-Host "`n[2/4] Создаю резервные копии реестра..." -ForegroundColor Cyan
$backups = Backup-Registry
Write-Host " Создано бэкапов: $backups" -ForegroundColor Green
Write-Host " Путь к бэкапам: $BackupDir" -ForegroundColor Gray
# Шаг 3: Запуск USBOblivion
Write-Host "`n[3/4] Запускаю USBOblivion..." -ForegroundColor Cyan
if ($Mode -eq "simulate") {
Write-Host " Режим: СИМУЛЯЦИЯ (изменений не будет)" -ForegroundColor Yellow
$arguments = "/silent /simulate"
} else {
Write-Host " Режим: РЕАЛЬНАЯ ОЧИСТКА" -ForegroundColor Red
$arguments = "/silent"
if (-not $Force) {
$finalConfirm = Read-Host "`nВыполнить реальную очистку? (ВВЕДИТЕ 'ПОДТВЕРЖДАЮ' для продолжения)"
if ($finalConfirm -ne 'ПОДТВЕРЖДАЮ') {
Write-Host "Очистка отменена." -ForegroundColor Yellow
exit 0
}
}
}
# Запускаем USBOblivion
try {
$process = Start-Process -FilePath $USBOblivionPath -ArgumentList $arguments -Wait -NoNewWindow -PassThru
if ($process.ExitCode -eq 0) {
Write-Host " ✓ USBOblivion успешно завершил работу" -ForegroundColor Green
} else {
Write-Host " ⚠ USBOblivion завершил работу с кодом: $($process.ExitCode)" -ForegroundColor Yellow
}
} catch {
Write-Host " ✗ Ошибка при запуске USBOblivion: $_" -ForegroundColor Red
}
# Шаг 4: Итоги
Write-Host "`n[4/4] Очистка завершена!" -ForegroundColor Green
Write-Host "=" * 60 -ForegroundColor Cyan
Write-Host "`nЧТО БЫЛО СДЕЛАНО:" -ForegroundColor Cyan
Write-Host " ✓ Создана точка восстановления системы" -ForegroundColor Green
Write-Host " ✓ Созданы резервные копии реестра" -ForegroundColor Green
Write-Host " ✓ Запущена очистка истории USB" -ForegroundColor Green
Write-Host "`nРЕКОМЕНДАЦИИ:" -ForegroundColor Yellow
Write-Host " 1. Перезагрузите компьютер для применения изменений" -ForegroundColor White
Write-Host " 2. Бэкапы реестра сохранены в: $BackupDir" -ForegroundColor White
Write-Host " 3. Проверьте журналы событий на наличие ошибок" -ForegroundColor White
Write-Host "`nСОВЕТ:" -ForegroundColor Cyan
Write-Host " Для проверки результата подключите флешку заново." -ForegroundColor Gray
Write-Host " Система должна определить её как новое устройство." -ForegroundColor Gray
# Сохранение лога
"=== Лог очистки USB ===" | Out-File $LogFile
"Дата: $(Get-Date)" | Out-File $LogFile -Append
"Режим: $Mode" | Out-File $LogFile -Append
"Бэкапы созданы в: $BackupDir" | Out-File $LogFile -Append
"USBOblivion путь: $USBOblivionPath" | Out-File $LogFile -Append
"" | Out-File $LogFile -Append
Write-Host "`nЛог операции сохранён: $LogFile" -ForegroundColor Gray
if ($Mode -eq "clean") {
Write-Host "`n⚠ ТРЕБУЕТСЯ ПЕРЕЗАГРУЗКА!" -ForegroundColor Red
$reboot = Read-Host "Перезагрузить сейчас? (да/нет)"
if ($reboot -eq 'да') {
Write-Host "Перезагрузка через 10 секунд..." -ForegroundColor Yellow
Start-Sleep -Seconds 10
Restart-Computer -Force
}
}
========================
✅ Подпишитесь на канал - (это бесплатно и очень помогает алгоритму)
❤️ Поставьте лайк - (это один клик, а нам очень важно)
🔄 Репостните друзьям - (которые играют в танки и жалуются на FPS)
💰 Задонатьте (Даже 50 руб. - это топливо для новых статей, скриптов и пошаговых инструкция для Вас. Большое Спасибо понимающим! 🙏
💰ПОДДЕРЖАТЬ КАНАЛ МОЖНО ТУТ ( ОТ 50 РУБЛЕЙ )💰
Или сделать любой перевод по ССЫЛКЕ или QR-коду через СБП. Быстро, безопасно и без комиссии. ( Александр Г. ) "Т.Е.Х.Н.О Windows & Linux".
=========================
📊 Часть 4: Моя сравнительная таблица методов очистки
Я тестировал все методы на виртуальной машине и своём основном компьютере. Вот объективные результаты:
🔧 Часть 5: Глубокая ручная очистка (когда USBOblivion недостаточно)
Через две недели использования USBOblivion я заметил: некоторые флешки всё равно оставляют следы. Пришлось лезть в дебри реестра. Вот что я узнал:
Самые хитрые места в реестре:
- Ключи DeviceClasses — Windows создаёт сложные структуры с GUID-идентификаторами
- Журналы SetupAPI — логи установки оборудования
- Кэши драйверов — система кэширует драйверы для ускорения
Мой скрипт для поиска скрытых следов:
# find_hidden_usb_traces.ps1
# Поиск следов USB-устройств по серийному номеру
param(
[string]$SerialNumber,
[switch]$DeepScan
)
Clear-Host
Write-Host "=== ПОИСК СКРЫТЫХ СЛЕДОВ USB ===" -ForegroundColor Cyan
Write-Host "Версия: 1.3" -ForegroundColor Gray
Write-Host ""
if (-not $SerialNumber) {
$SerialNumber = Read-Host "Введите серийный номер флешки (или его часть)"
}
if ([string]::IsNullOrWhiteSpace($SerialNumber)) {
Write-Host "Серийный номер не может быть пустым!" -ForegroundColor Red
exit 1
}
# Нормализация серийного номера
$SerialNumber = $SerialNumber.Trim().ToUpper()
Write-Host "Ищем следы для серийного номера: $SerialNumber" -ForegroundColor Yellow
Write-Host ""
# Места для поиска (основные)
$searchPaths = @(
"HKLM:\SYSTEM\CurrentControlSet\Enum",
"HKLM:\SYSTEM\CurrentControlSet\Control\DeviceClasses",
"HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\EMDMgmt",
"HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\MountPoints2"
)
# Дополнительные места для глубокого сканирования
if ($DeepScan) {
$searchPaths += @(
"HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\VolumeCaches",
"HKLM:\SOFTWARE\Microsoft\Windows Search",
"HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\RecentDocs"
)
}
$results = @()
$totalChecked = 0
foreach ($basePath in $searchPaths) {
Write-Host "Поиск в: $basePath" -ForegroundColor Gray
if (Test-Path $basePath) {
try {
# Получаем все подразделы
$keys = Get-ChildItem -Path $basePath -Recurse -ErrorAction SilentlyContinue
$totalChecked += $keys.Count
foreach ($key in $keys) {
# Поиск в имени ключа
if ($key.PSChildName -match $SerialNumber) {
$result = [PSCustomObject]@{
Тип = "Ключ реестра"
Путь = $key.Name
Значение = $key.PSChildName
Уровень = "Высокий"
}
$results += $result
}
# Поиск в значениях ключа
$properties = Get-ItemProperty -Path $key.PSPath -ErrorAction SilentlyContinue
if ($properties) {
foreach ($prop in $properties.PSObject.Properties) {
if ($prop.Value -and $prop.Value.ToString() -match $SerialNumber) {
$result = [PSCustomObject]@{
Тип = "Значение реестра"
Путь = $key.Name
Значение = "$($prop.Name) = $($prop.Value.ToString().Substring(0, [Math]::Min(50, $prop.Value.ToString().Length))...)"
Уровень = "Средний"
}
$results += $result
}
}
}
}
} catch {
Write-Host " Ошибка доступа: $_" -ForegroundColor DarkYellow
}
}
}
# Поиск в файловой системе
Write-Host "`nПоиск в файловой системе..." -ForegroundColor Gray
$fileLocations = @(
"$env:APPDATA\Microsoft\Windows\Recent",
"$env:LOCALAPPDATA\Microsoft\Windows\Explorer",
"$env:USERPROFILE\AppData\Local\Microsoft\Windows\History",
"$env:WINDIR\System32\config\systemprofile\AppData\Local\Microsoft\Windows"
)
foreach ($location in $fileLocations) {
if (Test-Path $location) {
try {
$files = Get-ChildItem -Path $location -Recurse -File -ErrorAction SilentlyContinue |
Where-Object { $_.Name -match $SerialNumber -or (Get-Content $_.FullName -Raw -ErrorAction SilentlyContinue) -match $SerialNumber }
foreach ($file in $files) {
$result = [PSCustomObject]@{
Тип = "Файл"
Путь = $file.DirectoryName
Значение = $file.Name
Уровень = "Низкий"
}
$results += $result
}
} catch {
# Пропускаем ошибки доступа
}
}
}
# Вывод результатов
Write-Host "`n" + "=" * 70 -ForegroundColor Cyan
Write-Host "РЕЗУЛЬТАТЫ ПОИСКА" -ForegroundColor Cyan
Write-Host "=" * 70 -ForegroundColor Cyan
Write-Host "Проверено записей: $totalChecked" -ForegroundColor Gray
Write-Host "Найдено совпадений: $($results.Count)" -ForegroundColor $(if ($results.Count -eq 0) { "Green" } else { "Yellow" })
if ($results.Count -gt 0) {
Write-Host "`nСОВПАДЕНИЯ (сгруппированы по типу):" -ForegroundColor Yellow
# Группируем по типу
$groupedResults = $results | Group-Object Тип
foreach ($group in $groupedResults) {
Write-Host "`n$($group.Name): $($group.Count) записей" -ForegroundColor Cyan
foreach ($item in $group.Group | Select-Object -First 3) {
Write-Host " • $($item.Значение)" -ForegroundColor Gray
Write-Host " Путь: $($item.Путь)" -ForegroundColor DarkGray
}
if ($group.Count -gt 3) {
Write-Host " ... и ещё $($group.Count - 3) записей" -ForegroundColor DarkGray
}
}
# Рекомендации по удалению
Write-Host "`n" + "=" * 70 -ForegroundColor Red
Write-Host "РЕКОМЕНДАЦИИ ПО УДАЛЕНИЮ:" -ForegroundColor Red
if ($results.Where{ $_.Уровень -eq "Высокий" }) {
Write-Host "`n⚠ ВЫСОКИЙ РИСК (ключи реестра):" -ForegroundColor Red
Write-Host " 1. Откройте regedit.exe" -ForegroundColor White
Write-Host " 2. Найдите каждый ключ из списка" -ForegroundColor White
Write-Host " 3. Щёлкните правой кнопкой → Экспорт (создайте бэкап!)" -ForegroundColor White
Write-Host " 4. Удалите ключ" -ForegroundColor White
Write-Host " 5. Перезагрузите компьютер" -ForegroundColor White
}
if ($results.Where{ $_.Уровень -eq "Средний" }) {
Write-Host "`n⚠ СРЕДНИЙ РИСК (значения реестра):" -ForegroundColor Yellow
Write-Host " Можно удалить через regedit, но будьте осторожны!" -ForegroundColor White
}
if ($results.Where{ $_.Уровень -eq "Низкий" }) {
Write-Host "`n✅ НИЗКИЙ РИСК (файлы):" -ForegroundColor Green
Write-Host " Удалите файлы через проводник" -ForegroundColor White
}
Write-Host "`n❗ ВАЖНО: Создайте точку восстановления перед удалением!" -ForegroundColor Red
} else {
Write-Host "`n🎉 ОТЛИЧНЫЕ НОВОСТИ!" -ForegroundColor Green
Write-Host "Следов флешки не обнаружено. Система чиста!" -ForegroundColor Green
}
# Сохранение отчёта
$reportPath = "$env:USERPROFILE\Desktop\USB_Traces_Report_$(Get-Date -Format 'yyyyMMdd_HHmm').txt"
$results | Format-List | Out-File $reportPath
Write-Host "`nПолный отчёт сохранён: $reportPath" -ForegroundColor Gray
Канал «Каморка Программиста» — это простые разборы программирования, языков, фреймворков и веб-дизайна. Всё для новичков и профессионалов.
Присоединяйся прямо сейчас.
🚀 Часть 6: Мой супер-скрипт полной очистки (всё в одном!)
После месяца экспериментов я создал универсальный скрипт, который делает всё:
# complete_usb_history_cleaner.ps1
# Полная очистка следов USB-устройств в Windows
# ВНИМАНИЕ: Только для опытных пользователей!
param(
[switch]$QuickMode,
[switch]$NoBackup,
[switch]$Force
)
# Конфигурация
$SCRIPT_VERSION = "3.0.0"
$USBOBLIVION_PATH = "C:\SecurityTools\USBOblivion\USBOblivion.exe"
$BACKUP_ROOT = "C:\SystemBackups\USB_Cleanup"
$LOG_FILE = "$env:TEMP\Complete_USB_Cleanup_$(Get-Date -Format 'yyyyMMdd_HHmm').log"
# Функция логирования
function Write-Log {
param([string]$Message, [string]$Level = "INFO")
$timestamp = Get-Date -Format "yyyy-MM-dd HH:mm:ss"
$logEntry = "$timestamp [$Level] $Message"
Add-Content -Path $LOG_FILE -Value $logEntry
switch ($Level) {
"INFO" { Write-Host $Message -ForegroundColor Gray }
"SUCCESS" { Write-Host $Message -ForegroundColor Green }
"WARNING" { Write-Host $Message -ForegroundColor Yellow }
"ERROR" { Write-Host $Message -ForegroundColor Red }
"STEP" { Write-Host $Message -ForegroundColor Cyan }
default { Write-Host $Message -ForegroundColor White }
}
}
# Функция создания точки восстановления
function Create-RestorePoint {
Write-Log "Создание точки восстановления системы..." "STEP"
try {
$checkpoint = Checkpoint-Computer -Description "Полная очистка истории USB [$SCRIPT_VERSION]" -RestorePointType "MODIFY_SETTINGS" -ErrorAction Stop
Write-Log "Точка восстановления успешно создана" "SUCCESS"
return $true
} catch {
Write-Log "Не удалось создать точку восстановления: $_" "WARNING"
return $false
}
}
# Функция бэкапа реестра
function Backup-RegistrySections {
$backupDir = "$BACKUP_ROOT\$(Get-Date -Format 'yyyyMMdd_HHmmss')"
New-Item -ItemType Directory -Path $backupDir -Force | Out-Null
Write-Log "Создание резервных копий реестра..." "STEP"
$registrySections = @(
@{Path = "HKLM\SYSTEM\CurrentControlSet\Enum\USBSTOR"; Name = "USBSTOR"},
@{Path = "HKLM\SYSTEM\MountedDevices"; Name = "MountedDevices"},
@{Path = "HKLM\SYSTEM\CurrentControlSet\Control\DeviceClasses"; Name = "DeviceClasses"},
@{Path = "HKLM\SYSTEM\CurrentControlSet\Enum\USB"; Name = "USB"},
@{Path = "HKLM\SOFTWARE\Microsoft\Windows Portable Devices"; Name = "PortableDevices"},
@{Path = "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\MountPoints2"; Name = "MountPoints2"}
)
$successCount = 0
foreach ($section in $registrySections) {
$backupFile = "$backupDir\$($section.Name).reg"
try {
Start-Process -FilePath "reg.exe" -ArgumentList "export `"$($section.Path)`" `"$backupFile`" /y" -Wait -NoNewWindow -ErrorAction Stop
if (Test-Path $backupFile) {
Write-Log " ✓ $($section.Name)" "SUCCESS"
$successCount++
}
} catch {
Write-Log " ✗ $($section.Name) (ошибка: $_)" "WARNING"
}
}
Write-Log "Создано бэкапов: $successCount из $($registrySections.Count)" "INFO"
return $backupDir
}
# Функция очистки через USBOblivion
function Clean-WithUSBOblivion {
if (-not (Test-Path $USBOBLIVION_PATH)) {
Write-Log "USBOblivion не найден, пропускаю этот шаг" "WARNING"
return $false
}
Write-Log "Запуск USBOblivion..." "STEP"
try {
# Сначала симуляция
Write-Log "Режим симуляции..." "INFO"
$simulate = Start-Process -FilePath $USBOBLIVION_PATH -ArgumentList "/silent /simulate" -Wait -NoNewWindow -PassThru
if ($simulate.ExitCode -eq 0) {
Write-Log "Симуляция успешна" "SUCCESS"
# Реальная очистка
Write-Log "Запуск реальной очистки..." "INFO"
$clean = Start-Process -FilePath $USBOBLIVION_PATH -ArgumentList "/silent" -Wait -NoNewWindow -PassThru
if ($clean.ExitCode -eq 0) {
Write-Log "USBOblivion успешно выполнил очистку" "SUCCESS"
return $true
} else {
Write-Log "USBOblivion завершился с кодом: $($clean.ExitCode)" "WARNING"
return $false
}
} else {
Write-Log "Симуляция завершилась с ошибкой" "WARNING"
return $false
}
} catch {
Write-Log "Ошибка запуска USBOblivion: $_" "ERROR"
return $false
}
}
# Функция очистки файловых кэшей
function Clear-FileCaches {
Write-Log "Очистка файловых кэшей..." "STEP"
$cacheLocations = @(
@{Path = "$env:APPDATA\Microsoft\Windows\Recent"; Description = "Недавние документы"},
@{Path = "$env:LOCALAPPDATA\Microsoft\Windows\Explorer"; Description = "Кэш проводника"},
@{Path = "$env:USERPROFILE\AppData\Local\Microsoft\Windows\History"; Description = "История"},
@{Path = "$env:LOCALAPPDATA\Microsoft\Windows\WebCache"; Description = "Веб-кэш"},
@{Path = "$env:TEMP"; Description = "Временные файлы"},
@{Path = "$env:WINDIR\Temp"; Description = "Системные временные файлы"},
@{Path = "$env:WINDIR\Prefetch"; Description = "Prefetch"}
)
$cleanedCount = 0
foreach ($location in $cacheLocations) {
if (Test-Path $location.Path) {
try {
# Удаляем только файлы старше 1 дня
$files = Get-ChildItem -Path $location.Path -Recurse -File -ErrorAction SilentlyContinue |
Where-Object { $_.LastWriteTime -lt (Get-Date).AddDays(-1) }
$fileCount = 0
foreach ($file in $files) {
try {
Remove-Item $file.FullName -Force -ErrorAction Stop
$fileCount++
} catch {
# Игнорируем ошибки удаления отдельных файлов
}
}
if ($fileCount -gt 0) {
Write-Log " $($location.Description): удалено $fileCount файлов" "INFO"
$cleanedCount++
}
} catch {
Write-Log " Ошибка доступа к $($location.Path)" "WARNING"
}
}
}
Write-Log "Очищено кэшей: $cleanedCount" "SUCCESS"
}
# Функция очистки журналов событий
function Clear-EventLogs {
Write-Log "Очистка журналов событий..." "STEP"
$eventLogs = @(
"Microsoft-Windows-DriverFrameworks-UserMode/Operational",
"Microsoft-Windows-Kernel-PnP/Configuration",
"Microsoft-Windows-StorPort/Operational",
"System",
"Application"
)
foreach ($log in $eventLogs) {
try {
wevtutil.exe clear-log $log 2>$null
Write-Log " Очищен: $log" "INFO"
} catch {
Write-Log " Не удалось очистить: $log" "WARNING"
}
}
Write-Log "Журналы событий очищены" "SUCCESS"
}
# Функция очистки корзины
function Clear-RecycleBins {
Write-Log "Очистка корзин всех пользователей..." "STEP"
try {
# Очищаем корзину текущего пользователя
Clear-RecycleBin -Force -ErrorAction SilentlyContinue
# Пытаемся очистить корзины всех пользователей через Cleanmgr
Start-Process "cleanmgr.exe" -ArgumentList "/sagerun:1" -Wait -NoNewWindow -ErrorAction SilentlyContinue
Write-Log "Корзины очищены" "SUCCESS"
} catch {
Write-Log "Не удалось очистить корзины" "WARNING"
}
}
# Функция дополнительных очисток
function Perform-AdditionalCleaning {
Write-Log "Выполнение дополнительных очисток..." "STEP"
# Очистка DNS кэша
try {
ipconfig /flushdns 2>$null | Out-Null
Write-Log " DNS кэш очищен" "INFO"
} catch {
Write-Log " Не удалось очистить DNS кэш" "WARNING"
}
# Очистка кэша эскизов
try {
Remove-Item "$env:LOCALAPPDATA\Microsoft\Windows\Explorer\thumbcache_*.db" -ErrorAction SilentlyContinue
Write-Log " Кэш эскизов очищен" "INFO"
} catch {
Write-Log " Не удалось очистить кэш эскизов" "WARNING"
}
# Перезапуск проводника
try {
Get-Process -Name explorer -ErrorAction SilentlyContinue | Stop-Process -Force
Start-Sleep -Seconds 2
Start-Process "explorer.exe"
Write-Log " Проводник перезапущен" "INFO"
} catch {
Write-Log " Не удалось перезапустить проводник" "WARNING"
}
}
# Функция проверки результата
function Test-CleanupResult {
Write-Log "Проверка результатов очистки..." "STEP"
$tests = @()
# Проверка наличия USBSTOR в реестре
try {
$usbstor = Get-ChildItem "HKLM:\SYSTEM\CurrentControlSet\Enum\USBSTOR" -ErrorAction SilentlyContinue
$tests += @{Name = "Реестр USBSTOR"; Result = if ($usbstor) { "FAIL" } else { "PASS" }}
} catch {
$tests += @{Name = "Реестр USBSTOR"; Result = "PASS"}
}
# Проверка MountedDevices
try {
$mountedDevices = Get-ItemProperty "HKLM:\SYSTEM\MountedDevices" -ErrorAction SilentlyContinue
$hasUSB = $false
if ($mountedDevices) {
$properties = $mountedDevices.PSObject.Properties | Where-Object { $_.Name -match "^\\DosDevices\\[D-Z]:" }
$hasUSB = $properties.Count -gt 0
}
$tests += @{Name = "MountedDevices"; Result = if ($hasUSB) { "WARN" } else { "PASS" }}
} catch {
$tests += @{Name = "MountedDevices"; Result = "PASS"}
}
# Вывод результатов проверки
Write-Log "`nРЕЗУЛЬТАТЫ ПРОВЕРКИ:" "STEP"
foreach ($test in $tests) {
$color = switch ($test.Result) {
"PASS" { "Green" }
"WARN" { "Yellow" }
"FAIL" { "Red" }
default { "Gray" }
}
Write-Host " $($test.Name): " -NoNewline -ForegroundColor Gray
Write-Host "$($test.Result)" -ForegroundColor $color
}
}
# Основной процесс
Clear-Host
Write-Host "=" * 70 -ForegroundColor Cyan
Write-Host "ПОЛНАЯ ОЧИСТКА СЛЕДОВ USB-УСТРОЙСТВ" -ForegroundColor Cyan
Write-Host "Версия: $SCRIPT_VERSION" -ForegroundColor Gray
Write-Host "=" * 70 -ForegroundColor Cyan
Write-Host ""
# Проверка прав администратора
$currentUser = New-Object Security.Principal.WindowsPrincipal([Security.Principal.WindowsIdentity]::GetCurrent())
if (-not $currentUser.IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)) {
Write-Log "ОШИБКА: Требуются права администратора!" "ERROR"
Write-Log "Запустите скрипт от имени администратора" "INFO"
pause
exit 1
}
# Предупреждение
Write-Log "ВНИМАНИЕ: Этот скрипт удалит ВСЕ следы USB-устройств!" "WARNING"
Write-Log "Будут затронуты: реестр, кэши, журналы событий" "WARNING"
Write-Log ""
if (-not $Force) {
Write-Host "Выполняемые действия:" -ForegroundColor Yellow
Write-Host " 1. Создание точки восстановления" -ForegroundColor Gray
Write-Host " 2. Бэкап реестра (если не отключен)" -ForegroundColor Gray
Write-Host " 3. Очистка через USBOblivion" -ForegroundColor Gray
Write-Host " 4. Очистка файловых кэшей" -ForegroundColor Gray
Write-Host " 5. Очистка журналов событий" -ForegroundColor Gray
Write-Host " 6. Очистка корзин" -ForegroundColor Gray
Write-Host " 7. Дополнительные очистки" -ForegroundColor Gray
Write-Host ""
$confirmation = Read-Host "Для продолжения введите 'ПОДТВЕРЖДАЮ'"
if ($confirmation -ne 'ПОДТВЕРЖДАЮ') {
Write-Log "Отменено пользователем" "INFO"
exit 0
}
}
try {
# Шаг 1: Создание точки восстановления
if (-not $QuickMode) {
$restorePointCreated = Create-RestorePoint
}
# Шаг 2: Бэкап реестра
$backupPath = $null
if (-not $NoBackup -and -not $QuickMode) {
$backupPath = Backup-RegistrySections
}
# Шаг 3: Очистка через USBOblivion
$usbOblivionResult = Clean-WithUSBOblivion
# Шаг 4: Очистка файловых кэшей
Clear-FileCaches
# Шаг 5: Очистка журналов событий
if (-not $QuickMode) {
Clear-EventLogs
}
# Шаг 6: Очистка корзин
Clear-RecycleBins
# Шаг 7: Дополнительные очистки
if (-not $QuickMode) {
Perform-AdditionalCleaning
}
# Шаг 8: Проверка результатов
Test-CleanupResult
# Итоги
Write-Host "`n" + "=" * 70 -ForegroundColor Green
Write-Host "ОЧИСТКА ЗАВЕРШЕНА!" -ForegroundColor Green
Write-Host "=" * 70 -ForegroundColor Green
Write-Log "`nИТОГИ ВЫПОЛНЕНИЯ:" "STEP"
Write-Host " ✓ Точка восстановления: $(if ($restorePointCreated) { 'Создана' } else { 'Пропущена' })" -ForegroundColor $(if ($restorePointCreated) { "Green" } else { "Yellow" })
Write-Host " ✓ Бэкап реестра: $(if ($backupPath) { $backupPath } else { 'Пропущен' })" -ForegroundColor $(if ($backupPath) { "Green" } else { "Yellow" })
Write-Host " ✓ USBOblivion: $(if ($usbOblivionResult) { 'Успешно' } else { 'С ошибками' })" -ForegroundColor $(if ($usbOblivionResult) { "Green" } else { "Yellow" })
Write-Host " ✓ Файловые кэши: Очищены" -ForegroundColor Green
Write-Host " ✓ Журналы событий: $(if (-not $QuickMode) { 'Очищены' } else { 'Пропущены' })" -ForegroundColor $(if (-not $QuickMode) { "Green" } else { "Yellow" })
Write-Log "`nРЕКОМЕНДАЦИИ ПОСЛЕ ОЧИСТКИ:" "STEP"
Write-Host " 1. ПЕРЕЗАГРУЗИТЕ компьютер для применения изменений" -ForegroundColor Red
Write-Host " 2. Проверьте диспетчер устройств (Win + X → Диспетчер устройств)" -ForegroundColor Yellow
Write-Host " 3. Убедитесь, что все USB-порты работают" -ForegroundColor Yellow
Write-Host " 4. При тестовом подключении флешка должна определиться как новое устройство" -ForegroundColor Yellow
if ($backupPath) {
Write-Host "`n📁 Бэкапы сохранены в: $backupPath" -ForegroundColor Gray
}
Write-Host "📄 Лог операции: $LOG_FILE" -ForegroundColor Gray
# Предложение перезагрузки
Write-Host "`n"
$rebootChoice = Read-Host "Перезагрузить компьютер сейчас? (да/нет)"
if ($rebootChoice -eq 'да') {
Write-Log "Перезагрузка через 10 секунд..." "INFO"
Start-Sleep -Seconds 10
Restart-Computer -Force
}
} catch {
Write-Log "КРИТИЧЕСКАЯ ОШИБКА: $_" "ERROR"
Write-Log "Стек вызовов: $($_.ScriptStackTrace)" "ERROR"
if ($backupPath) {
Write-Host "`n🔄 Для восстановления используйте бэкапы из: $backupPath" -ForegroundColor Yellow
}
Write-Host "📄 Лог ошибок: $LOG_FILE" -ForegroundColor Gray
pause
exit 1
}
Write-Log "Скрипт успешно завершён!" "SUCCESS"
📈 Часть 7: Моя статистика и результаты тестирования
Я вёл подробный журнал всех очисток за 30 дней. Вот объективные данные:
Вывод: Полная очистка даёт лучший результат, но слегка замедляет первичное определение новых устройств.
🚨 Часть 8: Что делать, если всё сломалось (чек-лист восстановления)
За месяц я трижды доводил систему до нерабочего состояния. Вот мой алгоритм восстановления:
Ситуация 1: Не работают USB-порты
1. Win + R → rstrui → Выбрать последнюю точку восстановления
2. Если не помогло: Диспетчер устройств → Контроллеры USB → Удалить все устройства
3. Действие → Обновить конфигурацию оборудования
4. Перезагрузка
Ситуация 2: Пропали буквы дисков
1. Win + X → Windows PowerShell (администратор)
2. Ввести:
diskpart
list volume
select volume X (где X — номер тома)
assign letter=Y (где Y — нужная буква)
Ситуация 3: Система не загружается
1. Загрузиться с установочной флешки Windows
2. Выбрать "Восстановление системы"
3. Использовать точку восстановления
💡 Часть 9: Мои уникальные лайфхаки (нигде такого не найдёте!)
- Лайфхак для параноиков: После очистки создайте виртуальную машину, подключите туда флешку, и уже оттуда копируйте файлы на основной компьютер. Следов не останется вообще.
- Автоматизация без риска: Настройте Task Scheduler на запуск скрипта очистки при каждом выходе из системы, но ТОЛЬКО если в системе были USB-устройства. Мой скрипт для этого:
# detect_and_clean.ps1
$usbDevices = Get-PnpDevice -Class USB | Where-Object { $_.FriendlyName -like "*USB*" }
if ($usbDevices) {
& "C:\SecurityTools\complete_usb_history_cleaner.ps1" -QuickMode
}
- Секретная папка для особо важных данных: Создайте зашифрованный контейнер VeraCrypt, подключайте его как виртуальный диск. Windows не оставляет следов о его содержимом.
- Невидимая флешка: Отформатируйте флешку в exFAT с меткой "System Reserved". Windows обрабатывает такие диски по-особому.
❓ Часть 10: Ответы на вопросы, которые мне задавали чаще всего
Вопрос: Это точно легально?
Ответ: Абсолютно. Вы чистите СВОЙ компьютер. Но на рабочем месте могут быть корпоративные политики.
Вопрос: Можно ли настроить Windows, чтобы она вообще не следила?
Ответ: Частично. Отключите службы Diagnostic* и Telemetry*, но полной приватности не добиться.
Вопрос: Антивирусы мешают?
Ответ: Да! Особенно Kaspersky и Norton. На время очистки отключайте защиту в реальном времени.
Вопрос: Windows 11/10 — есть разница?
Ответ: В Windows 11 слежка усилена, но методы очистки те же.
Вопрос: Как часто нужно чистить?
Ответ: После каждого использования чужих флешек. Свои — раз в месяц.
🎯 Часть 11: Ваш план действий на первые 24 часа
Час 1-2: Подготовка
- Скачайте USBOblivion
- Создайте папку C:\SecurityTools\
- Сохраните туда мои скрипты
- Создайте точку восстановления
Час 3-4: Первый запуск
- Запустите safe_usboblivion_launcher.ps1 в режиме симуляции
- Изучите, что будет удалено
- Запустите реальную очистку
- Перезагрузитесь
Час 5-8: Глубокая очистка
- Найдите серийный номер своей флешки
- Запустите find_hidden_usb_traces.ps1
- Удалите найденные следы через regedit
- Снова перезагрузитесь
Час 9-24: Тестирование и настройка
- Протестируйте работу USB-портов
- Настройте автоматическую очистку (если нужно)
- Создайте ярлыки для быстрого запуска скриптов
- Проверьте систему на стабильность
🌟 Заключение: Почему это важно и что это даёт лично вам
Месяц назад я был обычным пользователем, который боялся подключать флешки к чужому компьютеру. Сегодня я:
- Понимаю, как работает Windows на глубинном уровне
- Контролирую свою цифровую приватность
- Могу помочь друзьям и коллегам
- Не боюсь экспериментировать с системой
- Знаю, как восстановить её при любых проблемах
Но самое главное — я осознал: цифровая гигиена это не сложно. Это навык, который можно освоить за месяц. Как вождение автомобиля или готовку.
Ваша приватность — не абстрактное понятие. Это конкретные файлы в реестре, записи в журналах, файлы в кэшах. И теперь вы знаете, как с ними работать.
Не откладывайте. Начните с малого — скачайте USBOblivion и запустите его в режиме симуляции. Увидите, сколько мусора копится в вашей системе. А потом... потом вы уже не сможете остановиться. Потому что контроль — это addictive. 😉
Удачи в освоении! И помните: с великой силой приходит великая ответственность. Используйте эти знания только в благих целях. 🔒
🌟 ПОНРАВИЛАСЬ СТАТЬЯ? ПОДДЕРЖИТЕ АВТОРА! 🌟
🔥 Лайк — если было полезно! 👍
🔔 Подписка — чтобы не пропустить новое! 📌
🔄 Репост — поделитесь с друзьями! 💬
☕ Донат — на развитие проекта! ⭐
Ваша активность помогает создавать больше качественных материалов! 💪
#Windows #Безопасность #Приватность #USB #ОчисткаИстории #Реестр #PowerShell #Скрипты #Лайфхаки #Гайд #Инструкция #ЦифроваяГигиена #Конфиденциальность #ЗащитаДанных #Кибербезопасность #Windows10 #Windows11 #Советы #Оптимизация #Автоматизация#Администрирование #Программирование #КомпьютернаяГрамотность#ИнформационнаяБезопасность #ВосстановлениеСистемы #РезервноеКопирование #Технологии #Саморазвитие #IT