Обзор
Форк от u/InternetStranger4You с некоторыми существенными изменениями.
Структура
Код разделён на два модуля:
Microsoft.Windows.PSGeneral
- Код-обёртка для DISM и ReAgentC
- Расширенные проверки ожидающей перезагрузки
- Автоматическое изменение размера/перестроение раздела Windows RE
Microsoft.Windows.PSMitSec
- Включение
Microsoft.Windows.PSGeneral
- Повторная попытка
Add-DismPackage при необходимости
- Расширение раздела Windows RE при необходимости
Конечно, модули предназначены для демонстрации. Если вы хотите использовать их правильно, вам следует создать файлы манифеста и соответствующим образом указать зависимости.
Логирование
PSFramework используется вместо встроенных командлетов.
Примечания
Add-DismPackage всегда, кажется, даёт сбой один раз. Само сообщение об ошибке говорит, что это может быть временная ошибка (например, состояние гонки при обновлении стека обслуживания). Повторная попытка через несколько секунд всегда успешна.
- Было высказано предположение, что это может быть связано с обновлениями функций на месте. Я заметил это на чистой установке Windows 10 21H2.
- Как упоминалось в разделе Структура, этот скрипт автоматически изменит размер раздела восстановления Windows (WinRE) (если указано). Под изменением размера я подразумеваю удаление и перестроение.
- Требуется GPT-диск. Не то чтобы нельзя использовать MBR, просто я не хотел в этом разбираться. Большинство дисков сейчас должны быть GPT.
- Требуется существующий раздел WinRE. Это нужно для повторного использования существующего файла Winre.wim. Файл .wim нигде больше локально не присутствует. (Конечно, сам скрипт требует его; иначе нечего патчить.)
- Реализовать
Test-PSMitSec_CVE202241099
СПИСОК ЗАДАЧ
Важные
- Проверить, установлен ли патч перед обновлением.
- Повторное применение не вызовет сбоя.
- Применение патча может занять несколько минут. Microsoft Intune, похоже, запускает скрипты более одного раза, так что это сэкономит время.
- Когда
Add-DismPackage в первый раз даёт сбой, он выводит массу текста индикатора выполнения (выглядит очень грязно). Это следует подавить.
- Добавить параметр для
Resize-WinREPartition, чтобы принимать Winre.wim из альтернативного источника (например, с флешки с установочным носителем).
Не такие важные
- Улучшить имена переменных/функций
- Удалить ненужные инициализации переменных (я склонен писать PS как C#)
- Перенести часть вывода из Verbose в Host