概述
从 u/InternetStranger4You 分叉而来,并进行了一些重大修改。
布局
代码分为两个模块:
Microsoft.Windows.PSGeneral
- DISM 和 ReAgentC 的包装代码
- 针对待重启的扩展测试
- Windows RE 分区的自动调整/重建
Microsoft.Windows.PSMitSec
- 集成
Microsoft.Windows.PSGeneral
- 必要时重试
Add-DismPackage
- 必要时扩展 Windows RE 分区
当然,这些模块仅用于演示目的。如果您希望正确使用它们,应创建清单文件并适当引用依赖项。
日志记录
使用 PSFramework 替代内置 cmdlet。
备注
Add-DismPackage 似乎总是失败一次。错误信息本身说明可能是临时错误(例如更新服务堆栈时的竞争条件)。等待几秒后重试总是成功。
- 有建议认为这可能是由于就地功能升级引起的。我在全新安装的 Windows 10 21H2 上注意到了这一点。
- 如布局中所述,此脚本将自动调整 Windows 恢复 (WinRE) 分区的大小(如果指定)。调整大小的意思是删除并重建。
- 需要 GPT 磁盘。不是说不能使用 MBR,只是我不想研究那个。大多数磁盘现在应该都是 GPT 了。
- 需要存在一个 WinRE 分区。这是为了重用现有的 Winre.wim 文件。该 .wim 文件在本地其他地方不存在。(当然,脚本本身需要一个;否则就没有东西可以修补了。)
- 实现
Test-PSMitSec_CVE202241099
待办事项
重要
- 在更新前检查补丁是否已应用。
- 再次应用不会导致失败。
- 补丁可能需要几分钟才能应用。Microsoft Intune 似乎会多次运行脚本,因此这将节省时间。
- 当
Add-DismPackage 第一次失败时,会输出大量进度条文本(看起来非常混乱)。应该抑制这些输出。
- 为
Resize-WinREPartition 添加参数,以接受来自其他源(例如带有安装介质的 U 盘)的 Winre.wim。
不太重要
- 改进变量/函数命名
- 移除不必要的变量初始化(我倾向于像写 C# 一样写 PowerShell)
- 将一些输出从 Verbose 移到 Host