Скриптинг очистки диска Windows и обход уведомления о резервных копиях предыдущей ОС

Вопрос или проблема

На протяжении многих лет я использовал сценарий для запуска cleanmgr.exe и выполнения типичной задачи, указанной/сохраненной в реестре. Это, как правило, работало довольно хорошо, однако в последнее время стало ломаться. Когда я захожу на машину и запускаю GUI очистки диска и выбираю все окна, он работает нормально, но только после того, как я обработаю окно предупреждения, которое гласит следующее:

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

Мой вопрос таков: как мне преодолеть это окно предупреждения в коде? Насколько я могу судить, это единственная причина, по которой моя заскриптованная задача не работает. Следующий код, который я использую для заполнения записи реестра, на которую затем может ссылаться cleanmgr.exe. И снова, насколько я могу судить, это работало годами.

<# 
    Это быстрый и грязный способ запуска очистки диска Windows в фоновом режиме.
    
    Это в основном то же самое, что и выполнение следующей команды, которая позволяет настроить параметры и сохранить их в реестре.
        cleanmgr.exe /sageset:13

    Упомянутая команда изменяет уже существующие ключи реестра, добавляя к ним запись "StateFlags0013" Dword.
    Код "имитирует" это, чтобы мы могли позже вызвать cleanmgr.exe - молча - из сеанса RMM CMD или запланированного задания.
    
    После того как настройки реестра выполнены, вы можете запустить следующую команду для очистки пространства на диске.
        cleanmgr.exe /sagerun:13
#>

# Где находятся все ключи реестра.
$RegPathRoot = "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\VolumeCaches"
$StateFlag = "StateFlags0013"

# Массив для отдельных ключей реестра.
$RegKeys = @(
    "Active Setup Temp Folders",
    "BranchCache",
    "D3D Shader Cache",
    "Delivery Optimization Files",
    "Diagnostic Data Viewer database files",
    "Downloaded Program Files",
    "Feedback Hub Archive log files",
    "Internet Cache Files",
    "Language Pack",
    "Old ChkDsk Files",
    "Previous Installations",
    "Recycle Bin",
    "RetailDemo Offline Content",
    "Setup Log Files",
    "System error memory dump files",
    "System error minidump files",
    "Temporary Files",
    "Thumbnail Cache",
    "Update Cleanup",
    "User file versions",
    "Windows Defender",
    "Windows Error Reporting Files",
    "Windows Upgrade Log Files"
)

# Настройки реестра
ForEach ($RegKey in @($RegKeys)) {
    New-ItemProperty -Path "$RegPathRoot\$($RegKey)" -Name "$StateFlag" -Value "2" -PropertyType "DWord" -Force -ErrorAction SilentlyContinue
}

Ответ или решение

Когда речь идет о сценариях автоматизации, связанных с очисткой диска Windows, особенно с использованием утилиты cleanmgr.exe, мы часто сталкиваемся с различными препятствиями. Одним из таких препятствий является окно с предупреждением о невозможности восстановить предыдущие версии Windows после удаления установочных файлов предыдущих ОС. Ваша задача заключается в том, чтобы обойти это сообщение в автоматизированном процессе, что потребует более глубокого понимания, как функционирует этот инструмент Windows и как взаимодействовать с ним через сценарии.

Теория

cleanmgr.exe — это встроенная в Windows утилита, предназначенная для освобождения места на вашем жестком диске. Она позволяет удалять временные файлы, системные файлы предыдущих установок Windows и другие компоненты, которые могут занять значительное количество места. Когда вы используете интерфейс графического пользователя (GUI) для очистки предыдущих установок Windows, вам предлагается подтвердить действие через окно с предупреждением. Это окно появляется для предотвращения случайного удаления важных файлов, связанных с предыдущими версиями ОС, что может навсегда лишить возможности отката системы к предыдущей версии.

Пример

Вы используете сценарий PowerShell для настройки реестра, что позволяет cleanmgr.exe выполнять задачи по очистке. Ваш текущий метод настройки подразумевает создание и установку ключа StateFlags0013 для определенных параметров в реестре, которые утилита затем использует для выполнения очистки. Однако, судя по описанию проблемы, предпринимаемая вами попытка автоматизировать этот процесс сталкивается с тем, что окно предупреждения мешает его выполнению.

Применение

Преодоление данного сообщения о предупреждении потенциально может быть достигнуто несколькими методами, в зависимости от специфики вашего окружения и сценария реализации:

  1. Использование командной строки с более высоким уровнем привилегий: Инструмент cleanmgr.exe можно запускать в режиме повышенных привилегий. Это предполагает использование встроенных настроек для обхода некоторых предупреждающих окон, но, к сожалению, не всегда обходит именно названное окно предупреждения.

  2. Программирование пользовательского интерфейса (UI Automation): Можно использовать библиотеки для автоматизации пользовательского интерфейса (например, UI Automation, AutoIt или другие скриптовые языки), чтобы программно нажимать кнопку подтверждения в предупреждающем окне. Такие библиотеки позволяют взаимодействовать с оконными элементами, нажимать кнопки и вводить данные, имитируя действия пользователя.

  3. Групповые политики (GPO): Исследуйте возможность применения групповых политик для отключения сообщений с предупреждениями. Это может не сработать в каждом случае, но для некоторых предупреждений существует возможность управления ими через политики групп безопасности.

  4. Редактирование дополнительных параметров реестра: Попробуйте исследовать дополнительные параметры реестра. В некоторых случаях можно найти и выключить предупреждения, изменяя значения в реестре, связанные с политикой безопасности или настройками cleanmgr.

  5. Использование сторонних инструментов: Существуют сторонние инструменты, которые предлагают расширенные возможности по автоматизированной очистке диска. Эти инструменты могут не только предоставить более гибкие настройки, но и обойти стандартные ограничения Windows.

  6. Создание кастомных PowerShell скриптов: Может оказаться полезным создание более сложных PowerShell-скриптов, которые будут проверять наличие окна предупреждения и использовать метод обхода, например, ожидать и замыкать его после определенного времени задержки.

  7. Альтернативы в администрировании ОС: В некоторых случаях вам, возможно, потребуется пересмотреть внутренние процессы управления ОС для обработки подобных ситуаций более стратегически, например, используя контейнеризированные решения, где подобные сообщения могут быть подавлены наряду с удаленными контейнерами.

Таким образом, ваш текущий сценарий может быть дополнен элементом автоматизации UI или изменениями в групповых политиках и настройках реестра для достижения бесперебойной работы. Не забывайте также о тестировании любых изменений в безопасной среде перед развертыванием в производственной системе.

Оцените материал
Добавить комментарий

Капча загружается...