👋 Привет, админы!
👋 Привет, админы! Недавно столкнулся с ситуацией: на одном из серверов системный диск практически «забился» под завязку, а штатные чистилки мусора не помогали - свободного места оставалось критически мало. Оказалось, что куча старых файлов обновлений, временных логов и упаковок пакетов Windows Update съели не меньше 20 ГБ! 🔥 Чтобы оперативно и централизованно освободить место на C:, я использовал PowerShell-скрипт для сброса компонентов Windows Update и удаления временных файлов. # 1. Остановим службы обновлений Write-Host "Останавливаю службы Windows Update..." -ForegroundColor Cyan Stop-Service -Name wuauserv -Force Stop-Service -Name bits -Force Stop-Service -Name cryptsvc -Force # 2. Переименуем папки SoftwareDistribution и Catroot2 (чтобы сбросить кеш) $sd = "C:\Windows\SoftwareDistribution" $cr2 = "C:\Windows\System32\catroot2" $timestamp = Get-Date -Format "yyyyMMdd_HHmmss" Write-Host "Переименовываю SoftwareDistribution и Catroot2..." -ForegroundColor Cyan Rename-Item -Path $sd -NewName "SoftwareDistribution_$timestamp" -Force Rename-Item -Path $cr2 -NewName "catroot2_$timestamp" -Force # 3. Запустим службы обратно Write-Host "Запускаю службы Windows Update..." -ForegroundColor Cyan Start-Service -Name wuauserv Start-Service -Name bits Start-Service -Name cryptsvc # 4. Удаляем временные файлы пользователя и систему temp Write-Host "Удаляю временные файлы..." -ForegroundColor Cyan Get-ChildItem "C:\Windows\Temp" -Recurse -Force | Remove-Item -Force -Recurse -ErrorAction SilentlyContinue Get-ChildItem "$env:TEMP" -Recurse -Force | Remove-Item -Force -Recurse -ErrorAction SilentlyContinue # 5. Очищаем папку Prefetch (если нужно) Write-Host "Очищаю Prefetch (опционально)..." -ForegroundColor Cyan Get-ChildItem "C:\Windows\Prefetch" -Recurse -Force | Remove-Item -Force -Recurse -ErrorAction SilentlyContinue # 6. Запускаем анализ и дефрагментацию (для HDD/SDD команда отличается) Write-Host "Запускаю оптимизацию диска (для HDD)..." -ForegroundColor Cyan Optimize-Volume -DriveLetter C -ReTrim -Verbose Write-Host "Готово! Освобождено место и сброшен кеш Windows Update." -ForegroundColor Green 🔍 Что делает скрипт: 1. Останавливает службы wuauserv, bits и cryptsvc, чтобы освободить доступ к файлам обновлений. 2. Переименовывает папки SoftwareDistribution и catroot2 - таким образом Windows создаёт новые «чистые» папки при следующем запуске службы обновлений. 3. Перезапускает службы, чтобы система могла продолжить получать обновления. 4. Удаляет старые временные файлы из C:\Windows\Temp и из переменной %TEMP% текущего пользователя. 5. (Опционально) Очищает папку Prefetch - пригодится, если вы хотите сбросить предзагрузку приложений (иногда помогает ускорить старт служб). 6. Запускает командлет Optimize-Volume с параметром –ReTrim (важно для SSD, если нужно, или дефрагментацию для HDD), что в итоге дополнительно освобождает свободное пространство и приводит метаданные диска в порядок. 💡 Лайфхак: - Если вы работаете со множеством серверов, оберните этот скрипт в экспорт модуля или сохраните в виде .ps1, а затем запускайте его через Scheduled Task по расписанию раз в неделю/месяц. - Можно добавить проверку свободного места перед выполнением очистки, чтобы скрипт запускался, только когда доступно меньше, скажем, 10 ГБ: $freeGB = [math]::Round((Get-PSDrive -Name C).Free / 1GB, 2) if ($freeGB -lt 10) { # выполняем очистку } else { Write-Host "Достаточно места — пропускаю действия." } Не забывайте тестировать на тестовых окружениях перед тем, как развертывать на продакшне.