#Requires -Version 5.1 <# JbTecWiz Support Centre -- generated fix script Fault : Office will not install or repair -- 30015, 30088, 30183, 30029-4, 1058-13 Fix : Run the repair from the command line, not the Control Panel Source: https://jbtecwiz.com/support/win-office-install-fail Run as : PowerShell as administrator Expect : 40 minutes Risk : low Reversible : yes WHEN THIS IS THE RIGHT FIX Office is installed and misbehaving. Start here -- an online repair fixes most of these without removing anything. HOW TO UNDO IT A repair changes no user data -- documents, profiles and settings are untouched. Nothing to reverse. 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. #> [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 # This fix is documented as needing an elevated session. $id = [Security.Principal.WindowsIdentity]::GetCurrent() if (-not (New-Object Security.Principal.WindowsPrincipal $id).IsInRole( [Security.Principal.WindowsBuiltInRole]::Administrator)) { Write-Host '' Write-Host ' This fix needs an elevated PowerShell.' -ForegroundColor Yellow Write-Host ' Close this window, right-click PowerShell, Run as administrator,' Write-Host ' and run the script again.' Write-Host '' exit 3 } 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 4" 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 ' Office will not install or repair -- 30015, 30088, 30183, 30029-4, 1058-13' -ForegroundColor White Write-Host ' Run the repair from the command line, not the Control Panel' -ForegroundColor Cyan Write-Host '' Write-Host ' Risk: low Reversible 40 minutes' 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 'Close every Office application, including the background processes that outlive the windows.' -Why 'A repair that cannot replace a file in use fails with exactly the codes in this entry. The Control Panel repair does not tell you which process blocked it, which is why it appears to fail at random.' -Command { Get-Process WINWORD,EXCEL,OUTLOOK,POWERPNT,MSACCESS,ONENOTE,ms-teams,Teams,OfficeClickToRun -ErrorAction SilentlyContinue | Stop-Process -Force } Invoke-Step -Number 2 -Do 'Confirm the installed architecture so the repair is told the right one.' -Command { Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\Office\ClickToRun\Configuration' | Select-Object Platform, ClientVersionToReport, ProductReleaseIds } Invoke-Step -Number 3 -Do 'Run a quick repair first. It re-registers the installation without downloading anything, and it takes a couple of minutes.' -Why 'Change platform= to x86 if the value read above says 32-bit. Passing the wrong one is itself a source of 30015.' -Command { & "$env:CommonProgramFiles\Microsoft Shared\ClickToRun\OfficeClickToRun.exe" scenario=Repair platform=x64 culture=en-us RepairType=QuickRepair DisplayLevel=True } Invoke-Step -Number 4 -Do 'If the quick repair does not hold, run the full online repair. This re-downloads the whole package, so allow for several gigabytes and do not start it on a metered connection.' -Command { & "$env:CommonProgramFiles\Microsoft Shared\ClickToRun\OfficeClickToRun.exe" scenario=Repair platform=x64 culture=en-us RepairType=FullRepair DisplayLevel=True } Write-Rule " Confirm it worked" Show-Prose 'Every Office application opens and the version reported matches the build you expect.' 'White' Write-Host '' if (-not $DryRun) { Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\Office\ClickToRun\Configuration' | Select-Object ClientVersionToReport } 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-office-install-fail' 'Yellow' } else { Write-Host ' Finished.' -ForegroundColor Green } Write-Host '' Show-Prose 'To undo: A repair changes no user data -- documents, profiles and settings are untouched. Nothing to reverse.' 'DarkGray' Write-Rule