概要
u/InternetStranger4You からフォークし、大幅な変更を加えています。
レイアウト
コードは2つのモジュールに分割されています:
Microsoft.Windows.PSGeneral
- DISM と ReAgentC のラッパーコード
- 保留中の再起動のための拡張テスト
- Windows RE パーティションの自動リサイズ/再構築
Microsoft.Windows.PSMitSec
Microsoft.Windows.PSGeneral を組み込み
- 必要に応じて
Add-DismPackage を再試行
- 必要に応じて Windows RE パーティションを拡張
もちろん、これらのモジュールはデモンストレーション用です。適切に使用するには、マニフェストファイルを作成し、依存関係を適切に参照する必要があります。
ロギング
組み込みのコマンドレットの代わりに PSFramework を使用しています。
備考
Add-DismPackage は必ず一度は失敗するように見えます。エラーメッセージ自体に、一時的なエラー(Service Stack の更新における競合状態など)の可能性があると記載されています。数秒後に再試行すると、必ず成功します。
- これはインプレース機能アップグレードが原因である可能性が示唆されました。Windows 10 21H2 のクリーンインストールでこれに気づきました。
- レイアウト で述べたように、このスクリプトは Windows リカバリ (WinRE) パーティションを(指定された場合)自動的にリサイズします。リサイズ とは、削除して再構築することを意味します。
- GPT ディスクが必要です。MBR が使えないというわけではなく、単にその対応を考えたくなかっただけです。現在ではほとんどのディスクが GPT のはずです。
- 既存の WinRE パーティションが必要です。これは既存の Winre.wim ファイルを再利用するためです。.wim ファイルはローカルの他の場所には存在しません。(もちろん、スクリプト自体にも .wim が必要です。そうでなければ、パッチを適用するものがありません。)
Test-PSMitSec_CVE202241099 を実装する
やること
重要
- 更新前にパッチが適用されているか確認する。
- 再度適用しても失敗することはない。
- パッチの適用には数分かかることがある。Microsoft Intune はスクリプトを複数回実行するようなので、これで時間を節約できる。
Add-DismPackage が最初に失敗すると、大量のプログレスバーテキストが出力される(非常に見苦しい)。これは抑制すべきである。
- 代替ソース(インストールメディアのフラッシュドライブなど)から Winre.wim を受け付けるための
Resize-WinREPartition のパラメータを追加する。
それほど重要ではない
- 変数名/関数名を改善する
- 不要な変数の初期化を削除する(私は C# のように PS を書く傾向があります)
- 一部の出力を Verbose から Host に移動する