Resumen
Bifurcado de u/InternetStranger4You con algunos cambios considerables.
Estructura
El código se divide entre dos módulos:
Microsoft.Windows.PSGeneral
- Código envoltorio para DISM y ReAgentC
- Pruebas extendidas para reinicio pendiente
- Redimensionado/reconstrucción automática de la partición de Windows RE
Microsoft.Windows.PSMitSec
- Incorporando
Microsoft.Windows.PSGeneral
- Reintentando
Add-DismPackage, si es necesario
- Expandiendo la partición de Windows RE, si es necesario
Por supuesto, los módulos son para fines de demostración. Si desea usarlos correctamente, debe crear archivos de manifiesto y hacer referencia a las dependencias adecuadamente.
Registro
Se utiliza PSFramework en lugar de los cmdlets integrados.
Notas
Add-DismPackage siempre parece fallar una vez. El mensaje de error indica que podría ser un error temporal (como una condición de carrera al actualizar el Service Stack). Reintentar después de unos segundos siempre tiene éxito.
- Se sugirió que esto podría deberse a actualizaciones de características en el lugar. Noté esto en una instalación limpia de Windows 10 21H2.
- Como se mencionó en Estructura, este script redimensionará automáticamente la partición de Windows Recovery (WinRE) (si se especifica). Por redimensionar, quiero decir eliminar y reconstruir.
- Requiere un disco GPT. No es que no puedas usar MBR, es que no me apeteció resolverlo. La mayoría de los discos deberían ser GPT ahora.
- Requiere una partición WinRE existente. Esto es para reutilizar el archivo Winre.wim existente. El .wim no está presente en ningún otro lugar localmente. (Por supuesto, el script en sí requeriría una; de lo contrario, no hay nada que parchear.)
- Implement
Test-PSMitSec_CVE202241099
POR HACER
Importante
- Verificar si el parche está aplicado antes de actualizar.
- Aplicarlo de nuevo no hará que falle.
- El parche puede tardar unos minutos en aplicarse. Microsoft Intune parece ejecutar scripts más de una vez, por lo que esto ahorraría tiempo.
- Cuando
Add-DismPackage falla por primera vez, genera un montón de texto de barra de progreso (se ve muy desordenado). Debería suprimirse.
- Agregar parámetro para que
Resize-WinREPartition acepte Winre.wim desde una fuente alternativa (como una unidad flash con medio de instalación).
No tan Importante
- Mejorar nombres de variables/funciones
- Eliminar inicializaciones de variables innecesarias (tiendo a escribir PS como C#)
- Mover algo de salida de Verbose a Host