#Requires -Version 5.1 <# JbTecWiz Support Centre -- generated fix script Fault : 0x800f0922 -- update fails, System Reserved partition full or no route to Microsoft Fix : Make room in the System Reserved partition Source: https://jbtecwiz.com/support/win-0x800f0922 Run as : Elevated PowerShell Expect : 25 minutes Risk : medium Reversible : NO -- read the undo note below before running WHEN THIS IS THE RIGHT FIX The Secure Boot or a cumulative update fails. This deletes files from a system partition -- read every step before starting. HOW TO UNDO IT Deleted boot files cannot be restored in place. If the machine will not boot afterwards, repair the boot files from installation media with bcdboot C:\Windows /s Y: /f ALL. This script walks the fix one step at a time and asks before each one. Steps with no command are things you do yourself -- it prints those and waits. Run with -DryRun to print without executing. -------------------------------------------------------------------- NO WARRANTY - USE AT YOUR OWN RISK This script is provided by JbTecWiz as-is and with no warranty of any kind, express or implied. You run it entirely at your own risk. JbTecWiz accepts no liability for any loss or damage arising from its use, including but not limited to data loss, downtime, or configuration changes that turn out to be wrong for your system. You are responsible for reading this script before running it, for satisfying yourself that it suits the machine in front of you, and for having a working backup first. Some steps cannot be undone. -------------------------------------------------------------------- #> [CmdletBinding()] param( # Print every step and command without running anything. [switch]$DryRun, # Do not ask before each step. Read the script first if you use this. [switch]$Unattended ) $ErrorActionPreference = 'Stop' $script:Failed = 0 function Write-Rule { param([string]$Text) Write-Host '' Write-Host ('-' * 70) -ForegroundColor DarkGray if ($Text) { Write-Host $Text -ForegroundColor Cyan } } function Show-Prose { param([string]$Text, [string]$Colour = "Gray") if (-not $Text) { return } $words = $Text -split "\s+"; $line = " " foreach ($w in $words) { if (($line.Length + $w.Length) -gt 74) { Write-Host $line -ForegroundColor $Colour; $line = " " } $line += "$w " } if ($line.Trim()) { Write-Host $line -ForegroundColor $Colour } } function Invoke-Step { param( [int]$Number, [string]$Do, [string]$Why, [scriptblock]$Command, [switch]$Manual, [string]$Shell = "powershell" ) Write-Rule " Step $Number of 7" Show-Prose $Do "White" if ($Why) { Write-Host ""; Show-Prose $Why "DarkGray" } if ($Manual) { Write-Host '' Write-Host ' -> Do this yourself, then press Enter to carry on.' -ForegroundColor Yellow if (-not $Unattended -and -not $DryRun) { [void](Read-Host) } return } Write-Host '' foreach ($l in ($Command.ToString().Trim() -split "`n")) { Write-Host (" " + $l.Trim()) -ForegroundColor Green } Write-Host '' if ($DryRun) { Write-Host " (dry run -- not executed)" -ForegroundColor DarkGray; return } if (-not $Unattended) { $a = Read-Host " Run this step? [Y]es / [S]kip / [Q]uit" if ($a -match "^[Qq]") { Write-Host " Stopped at your request."; exit 0 } if ($a -match "^[Ss]") { Write-Host " Skipped." -ForegroundColor DarkGray; return } } try { & $Command } catch { $script:Failed++ Write-Host (" Step $Number failed: " + $_.Exception.Message) -ForegroundColor Red Show-Prose "The rest of the fix may depend on this. Read the write-up before carrying on." "Red" if (-not $Unattended) { $c = Read-Host " Carry on anyway? [y/N]" if ($c -notmatch "^[Yy]") { exit 1 } } } } Write-Rule Write-Host ' 0x800f0922 -- update fails, System Reserved partition full or no route to Microsoft' -ForegroundColor White Write-Host ' Make room in the System Reserved partition' -ForegroundColor Cyan Write-Host '' Write-Host ' Risk: medium NOT REVERSIBLE 25 minutes' -ForegroundColor Yellow Write-Host '' Show-Prose 'Undo: Deleted boot files cannot be restored in place. If the machine will not boot afterwards, repair the boot files from installation media with bcdboot C:\Windows /s Y: /f ALL.' 'Yellow' Write-Host '' Show-Prose 'No warranty. Use at your own risk - JbTecWiz accepts no liability. Read it before you run it, and have a backup.' 'DarkYellow' Write-Rule if (-not $Unattended -and -not $DryRun) { $go = Read-Host ' Ready? [y/N]' if ($go -notmatch "^[Yy]") { Write-Host " Nothing was changed."; exit 0 } } Invoke-Step -Number 1 -Do 'Check how much free space the partition actually has.' -Why 'The update needs roughly 15 MB free here. Anything under about 40 MB will fail, and the error says nothing about disk space.' -Command { Get-Partition | Where-Object { $_.Type -eq 'System' -or $_.IsSystem } | Get-Volume | Format-Table DriveLetter, FileSystemLabel, @{n='FreeMB';e={[int]($_.SizeRemaining/1MB)}}, @{n='SizeMB';e={[int]($_.Size/1MB)}} } Invoke-Step -Number 2 -Do 'Give the partition a temporary drive letter so you can see inside it.' -Command { $p = Get-Partition | Where-Object { $_.IsSystem -and -not $_.DriveLetter } | Select-Object -First 1 Set-Partition -InputObject $p -NewDriveLetter Y } Invoke-Step -Number 3 -Do 'On a BIOS/MBR machine, the space is nearly always old language folders under Y:\Boot. Delete everything except en-GB and en-US.' -Why 'Look at the list before deleting anything. These are boot-time localisation files; removing the one your firmware uses leaves a machine that boots to a blank screen.' -Command { Get-ChildItem Y:\Boot -Directory | Where-Object Name -notin 'en-GB','en-US','Fonts','Resources' | Select-Object Name } Invoke-Step -Number 4 -Do 'Remove them once you have read the list.' -Command { Get-ChildItem Y:\Boot -Directory | Where-Object Name -notin 'en-GB','en-US','Fonts','Resources' | Remove-Item -Recurse -Force } Invoke-Step -Number 5 -Do 'On a UEFI machine the partition is the EFI System Partition instead. Clear the font cache there, which is usually the bulk of it.' -Command { Remove-Item 'Y:\EFI\Microsoft\Boot\Fonts\*' -Force -ErrorAction SilentlyContinue } Invoke-Step -Number 6 -Do 'Remove the temporary drive letter again -- leaving it assigned exposes the boot partition in Explorer.' -Command { Remove-PartitionAccessPath -InputObject $p -AccessPath 'Y:\' } Invoke-Step -Number 7 -Do 'Retry the update.' -Manual Write-Rule " Confirm it worked" Show-Prose 'The partition has 50 MB or more free and the update installs.' 'White' Write-Host '' if (-not $DryRun) { Get-Volume | Where-Object FileSystemLabel -eq 'System Reserved' | Format-Table @{n='FreeMB';e={[int]($_.SizeRemaining/1MB)}} } Write-Rule if ($script:Failed -gt 0) { Write-Host (" Finished with " + $script:Failed + " failed step(s).") -ForegroundColor Yellow Show-Prose 'Read the full write-up at https://jbtecwiz.com/support/win-0x800f0922' 'Yellow' } else { Write-Host ' Finished.' -ForegroundColor Green } Write-Host '' Show-Prose 'To undo: Deleted boot files cannot be restored in place. If the machine will not boot afterwards, repair the boot files from installation media with bcdboot C:\Windows /s Y: /f ALL.' 'DarkGray' Write-Rule