#Requires -Version 5.1 <# JbTecWiz Support Centre -- generated fix script Fault : "There was a problem resetting your PC" -- Reset this PC fails Fix : Use an in-place upgrade instead of a reset Source: https://jbtecwiz.com/support/win-rec-reset-failed Run as : A mounted ISO of the same or a newer build Expect : 90 minutes Risk : medium Reversible : yes WHEN THIS IS THE RIGHT FIX The reset will not run and the machine needs repairing without losing anything. HOW TO UNDO IT Settings -> System -> Recovery -> Go back offers a return to the previous build for ten days. 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 5" 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 ' "There was a problem resetting your PC" -- Reset this PC fails' -ForegroundColor White Write-Host ' Use an in-place upgrade instead of a reset' -ForegroundColor Cyan Write-Host '' Write-Host ' Risk: medium Reversible 90 minutes' 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 'Back up first, regardless of what the process promises.' -Manual Invoke-Step -Number 2 -Do 'Download the current Windows ISO from Microsoft and mount it. The build must be the same or newer than the one installed -- you cannot repair with an older one.' -Manual Invoke-Step -Number 3 -Do 'Run setup.exe from within the running Windows, not from a boot menu, and choose to keep personal files and apps.' -Why 'An in-place upgrade rewrites every system file while preserving applications, settings and data. It repairs almost everything a reset would have fixed, and unlike a reset it does not remove installed software.' -Command { cmd.exe /c 'E:\setup.exe' } Invoke-Step -Number 4 -Do 'Disconnect non-essential peripherals and pause any third-party antivirus for the duration -- both are common causes of a failed upgrade.' -Manual Invoke-Step -Number 5 -Do 'Allow 60-90 minutes, and expect several restarts.' -Manual Write-Rule " Confirm it worked" Show-Prose 'Windows starts with applications and data intact, and winver shows the expected build.' 'White' Write-Host '' if (-not $DryRun) { cmd.exe /c 'winver' } 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-rec-reset-failed' 'Yellow' } else { Write-Host ' Finished.' -ForegroundColor Green } Write-Host '' Show-Prose 'To undo: Settings -> System -> Recovery -> Go back offers a return to the previous build for ten days.' 'DarkGray' Write-Rule