Catégories
Informatique

Script PowerShell pour résoudre les blocages liés aux KB5034441/KB5034440

Microsoft a récemment sorti des mises à jour qui .. peuvent ne pas réussir à s’installer sur vos ordinateurs.. Et un script PowerShell permet de résoudre ce blocage.

On vous explique!

La KB5034441 met à jour l’environnement de récupération Windows (WinRE) qui est porteur d’une vulnérabilité de sécurité décrite dans la CVE-2024-20666 en Janvier. Celle-ci concerne les ordinateurs sous Windows 10 21H2 et 22H3.

La KB5034440 met à jour l’environnement de récupération Windows (WinRE) qui est porteur d’une vulnérabilité de sécurité décrite dans la CVE-2024-20666 en Janvier. Celle-ci concerne les ordinateurs sous Windows 11 21H2.

L’erreur 0x80070643 – ERROR_INSTALL_FAILURE 

Windows Update - Erreur 0x80070643 - ERROR_INSTALL_FAILURE

Ces deux mises à jour ont besoin de 250 Mo libres sur la partition de récupération des machines concernées pour réussir.

Mais .. la partition de récupération faite par Windows 10 ne fait que 522 Mo et n’a pas la place suffisante pour installer la mise à jour.

La solution pas parfaite de Microsoft: KB5028997

Microsoft a sorti un guide pour redimensionner manuellement votre patition Windows de récupération WinRE avec la KB5028997

C’est quand même pas pratique et ils ont ensuite publié des scripts PowerShell pour faciliter la chose mais sans remporter un franc succès.

Le script PowerShell magique

Un utilisateur de Reddit a eu la bonté de créer un script PowerShell qui aide et fonctionne bien d’après nos tests.

Ce script désactive Windows WinRE, redimensionne la partition principale en lui enlevant 250 Mb et recrée la partition de récupération, puis réactive WinRE.

Attention en revanche le script ne vérifie pas si votre partition fait déjà la bonne taille, donc il ne faut le lancer que sur les machines problématiques.

Gardez aussi en tête qu’éditer les partitions peut entraîner des pertes de données, des pannes et que nous ne pourrions être tenus responsables :)

#Script to fix the recovery partition for KB5028997 by /u/InternetStranger4You 
#Mostly Powershell version of Microsoft's support article: https://support.microsoft.com/en-us/topic/kb5028997-instructions-to-manually-resize-your-partition-to-install-the-winre-update-400faa27-9343-461c-ada9-24c8229763bf    
#Test in your own environment before running. Not responsible for any damages.

#Run reagentc.exe /info and save the output
$pinfo = New-Object System.Diagnostics.ProcessStartInfo
$pinfo.FileName = "reagentc.exe"
$pinfo.RedirectStandardOutput = $true
$pinfo.UseShellExecute = $false
$pinfo.Arguments = '/info'
$p = New-Object System.Diagnostics.Process
$p.StartInfo = $pinfo
$p.Start() | Out-Null
$p.WaitForExit()
$stdout = $p.StandardOutput.ReadToEnd()


#Disable Windows recovery environment
Start-Process "reagentc.exe" -ArgumentList "/disable" -Wait -NoNewWindow

#Verify that disk and partition are listed in reagentc.exe /info. If blank, then something is wrong with WinRE
if(($stdout.IndexOf("harddisk") -ne -1) -and ($stdout.IndexOf("partition") -ne -1)){
    #Get recovery disk number and partition number
    $DiskNum=$stdout.substring($stdout.IndexOf("harddisk")+8,1)
    $RecPartNum=$stdout.substring($stdout.IndexOf("partition")+9,1)

    #Resize OS partition
    $size=Get-Disk $DiskNum | Get-Partition -PartitionNumber ($RecPartNum-1) |Select-Object -ExpandProperty Size
    Get-Disk $DiskNum | Resize-Partition -PartitionNumber ($RecPartNum-1) -Size ($size - 250MB)
    
    #Remove the recovery partition
    Get-Disk $DiskNum | Remove-Partition -PartitionNumber $RecPartNum -Confirm:$false
    
    #Create new partion with diskpart script
    $DiskpartScriptPath = $env:TEMP
    $DiskpartScriptName = "ResizeREScript.txt"
    $DiskpartScript = $DiskpartScriptPath+'\'+$DiskpartScriptName
    "sel disk $($DiskNum)"|Out-File -FilePath $DiskpartScript -Encoding utf8 -Force
    $PartStyle = Get-Disk $DiskNum |Select-Object -ExpandProperty PartitionStyle
    if($PartStyle -eq "GPT"){
        #GPT partition commands
        "create partition primary id=de94bba4-06d1-4d40-a16a-bfd50179d6ac"|Out-File -FilePath $DiskpartScript -Encoding utf8 -Append -Force
        "gpt attributes =0x8000000000000001"|Out-File -FilePath $DiskpartScript -Encoding utf8 -Append -Force
    }else{
        #MBR partition command
        "create partition primary id=27"|Out-File -FilePath $DiskpartScript -Encoding utf8 -Append -Force
    }
    "format quick fs=ntfs label=`"Windows RE tools`""|Out-File -FilePath $DiskpartScript -Encoding utf8 -Append -Force
    Start-Process "diskpart.exe" -ArgumentList "/s $($DiskpartScriptName)" -Wait -NoNewWindow -WorkingDirectory $DiskpartScriptPath

    #Enable the recovery environment
    Start-Process "reagentc.exe" -ArgumentList "/enable" -Wait -NoNewWindow

}else{
    Write-Warning "Recovery partition not found. Aborting script."
}

Laisser un commentaire