Скрипт PowerShell для проверки и устранения ошибок в ОС Windows

1 декабря 2024

Скрипт выполняет проверку и восстановление системных файлов Windows, очищает временные файлы и управляет службой обновления Windows. Он автоматически обрабатывает ошибки на каждом этапе выполнения.

Этот скрипт на PowerShell состоит из следующих этапов:

  1. Проверка прав администратора:
    • Убедится, что скрипт запущен с правами администратора.
    • Если права недостаточны, завершает выполнение с предупреждением.
  2. Управление службой обновления Windows:
    • Остановка службы обновления Windows (wuauserv) перед выполнением операций восстановления, чтобы избежать конфликтов.
    • Перезапуск службы обновления Windows в конце, чтобы система могла продолжить проверку обновлений.
  3. Проверка и восстановление системных файлов:
    • Выполняет проверку целостности системного образа Windows с помощью DISM:
      • CheckHealth: Быстрая проверка состояния образа.
      • RestoreHealth: Восстановление повреждённого системного образа.
    • Использует SFC для проверки и восстановления системных файлов.
  4. Очистка временных файлов:
    • Удаляет временные файлы в системных каталогах:
      • Системный каталог C:\Windows\Temp.
      • Временные файлы текущего пользователя C:\Users\<Имя>\AppData\Local\Temp.
    • Для каждого профиля пользователя, кроме системных, выполняет очистку временных файлов из папки Temp.
  5. Обработка ошибок:
    • Каждый этап обёрнут в конструкцию try-catch для предотвращения полного завершения скрипта при возникновении ошибок.
    • Выводит информативные сообщения в случае возникновения проблем, чтобы пользователь мог диагностировать ситуацию.
  6. Сообщения для пользователя:
    • Каждый шаг сопровождается информацией в консоли, чтобы пользователь понимал, что происходит в данный момент.

Для чего предназначен скрипт

Скрипт полезен для:

  • Восстановления стабильности операционной системы.
  • Устранения проблем с системными файлами и обновлениями.
  • Очистки временных файлов для освобождения места и улучшения производительности.

Примечание

Перед использованием рекомендуется сохранить данные и протестировать скрипт в тестовой среде, чтобы избежать потери важной информации.

Скрипт:

# Проверяем права администратора
if (-NOT ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)) { Write-Warning "Скрипт должен быть запущен с правами администратора!" Exit
}

# Останавливаем службу обновления Windows
try { Write-Host "Останавливаем службу обновления Windows..." Stop-Service -Name wuauserv -Force -ErrorAction Stop
} catch { Write-Warning "Не удалось остановить службу обновления Windows: $_"
}

# Проверка целостности образа Windows с помощью DISM
Write-Host "Проверка целостности образа Windows с помощью DISM..."
try { Start-Process -FilePath "dism.exe" -ArgumentList "/Online /Cleanup-Image /CheckHealth" -Wait -NoNewWindow
} catch { Write-Warning "Ошибка при выполнении проверки целостности образа: $_"
}

# Восстановление образа Windows с помощью DISM
Write-Host "Восстановление образа Windows с помощью DISM..."
try { Start-Process -FilePath "dism.exe" -ArgumentList "/Online /Cleanup-Image /RestoreHealth" -Wait -NoNewWindow
} catch { Write-Warning "Ошибка при восстановлении образа: $_"
}

# Проверка целостности системных файлов
Write-Host "Проверка целостности системных файлов..."
try { Start-Process -FilePath "sfc.exe" -ArgumentList "/scannow" -Wait -NoNewWindow
} catch { Write-Warning "Ошибка при проверке системных файлов: $_"
}

# Очистка временных файлов
Write-Host "Очистка временных файлов..."
try { Remove-Item -Path "$env:SystemRoot\Temp\*" -Recurse -Force -ErrorAction SilentlyContinue Remove-Item -Path "$env:USERPROFILE\AppData\Local\Temp\*" -Recurse -Force -ErrorAction SilentlyContinue
} catch { Write-Warning "Ошибка при очистке временных файлов: $_"
}

# Получаем список профилей пользователей
$userProfiles = Get-CimInstance Win32_UserProfile | Where-Object { $_.Special -ne $true }

foreach ($profile in $userProfiles) { try { # Путь к временным файлам текущего пользователя $tempPath = Join-Path -Path $profile.LocalPath -ChildPath "AppData\Local\Temp\*" Write-Host "Очистка временных файлов для пользователя $($profile.LocalPath)" Remove-Item -Path $tempPath -Recurse -Force -ErrorAction SilentlyContinue } catch { Write-Warning "Ошибка при очистке временных файлов для пользователя $($profile.LocalPath): $_" }
}

# Перезапуск службы обновления Windows
try { Write-Host "Перезапуск службы обновления Windows..." Start-Service -Name wuauserv -ErrorAction Stop
} catch { Write-Warning "Не удалось перезапустить службу обновления Windows: $_"
}