Visão Geral
Forked de u/InternetStranger4You com algumas mudanças consideráveis.
Estrutura
O código é dividido entre dois módulos:
Microsoft.Windows.PSGeneral
- Código wrapper para DISM e ReAgentC
- Testes estendidos para reinicialização pendente
- Redimensionamento/recriação automática da partição do Windows RE
Microsoft.Windows.PSMitSec
- Incorporando
Microsoft.Windows.PSGeneral
- Repetindo
Add-DismPackage, se necessário
- Expandindo a partição do Windows RE, se necessário
É claro que os módulos são apenas para fins de demonstração. Se você deseja usá-los adequadamente, deve criar arquivos de manifesto e referenciar as dependências da forma apropriada.
Logging
PSFramework é usado em vez dos cmdlets nativos.
Notas
Add-DismPackage sempre parece falhar uma vez. A própria mensagem de erro diz que pode ser um erro temporário (como uma condição de corrida para atualizar o Service Stack). Repetir após alguns segundos sempre funciona.
- Foi sugerido que isso poderia ser devido a atualizações de recursos in-loco. Notei isso em uma instalação nova do Windows 10 21H2.
- Como mencionado em Estrutura, este script redimensiona automaticamente a partição do Windows Recovery (WinRE) (se especificado). Por redimensionar, quero dizer excluir e recriar.
- Requer um disco GPT. Não que você não possa usar MBR, é só que não tive vontade de descobrir como fazer isso. A maioria dos discos já deve ser GPT hoje em dia.
- Requer uma partição WinRE existente. Isso é para reutilizar o arquivo Winre.wim existente. O .wim não está presente em nenhum outro lugar localmente. (Claro, o próprio script precisaria de um; caso contrário, não haveria nada para aplicar o patch.)
- Implementar
Test-PSMitSec_CVE202241099
A FAZER
Importante
- Verificar se o patch foi aplicado antes de atualizar.
- Aplicá-lo novamente não fará com que falhe.
- O patch pode levar alguns minutos para ser aplicado. O Microsoft Intune parece executar scripts mais de uma vez, então isso economizaria tempo.
- Quando
Add-DismPackage falha pela primeira vez, ele gera um monte de texto de barra de progresso (parece muito bagunçado). Isso deve ser suprimido.
- Adicionar parâmetro para
Resize-WinREPartition aceitar Winre.wim de fonte alternativa (como um pendrive com mídia de instalação).
Não tão Importante
- Melhorar nomes de variáveis/funções
- Remover inicializações de variáveis desnecessárias (eu tendo a escrever PS como C#)
- Mover parte da saída de Verbose para Host