#Requires -Version 5.1 <# JbTecWiz Support Centre -- generated fix script Fault : Printing from Office fails, prints blank, or goes to the wrong printer Fix : Isolate the driver Source: https://jbtecwiz.com/support/win-office-printing Run as : PowerShell as administrator Expect : 40 minutes Risk : medium Reversible : yes WHEN THIS IS THE RIGHT FIX Office prints blank or garbled while simpler applications are fine. HOW TO UNDO IT The original printer and driver are untouched if you added a second queue rather than replacing it -- delete the test queue when finished. 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 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 ' Printing from Office fails, prints blank, or goes to the wrong printer' -ForegroundColor White Write-Host ' Isolate the driver' -ForegroundColor Cyan Write-Host '' Write-Host ' Risk: medium 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 'Print the same document to Microsoft Print to PDF. This separates the document from the printer in one step.' -Why 'A clean PDF means the document and Office are fine and the fault is the driver or the device. A broken PDF means the document itself is the problem and no amount of driver work will help.' -Manual Invoke-Step -Number 2 -Do 'List what driver the printer is using.' -Command { Get-Printer | Select-Object Name, DriverName, PortName } Invoke-Step -Number 3 -Do 'Try the alternative driver type. If it is on a PCL driver, add the same printer again using the PostScript driver, or the reverse.' -Why 'Office generates far richer output than most applications -- transparency, gradients, embedded fonts -- and a driver with a rendering bug will fail on that and nothing else. Swapping the driver type is quicker than diagnosing the bug and usually resolves it outright.' -Manual Invoke-Step -Number 4 -Do 'Update the driver from the manufacturer rather than from Windows Update, which often carries a older or generic version.' -Manual Invoke-Step -Number 5 -Do 'Test with the document''s graphics simplified -- in Word, File -> Options -> Advanced -> Print, tick "Print in background" off and test again.' -Manual Write-Rule " Confirm it worked" Show-Prose 'The document prints correctly from Office with the working driver.' 'White' 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-printing' 'Yellow' } else { Write-Host ' Finished.' -ForegroundColor Green } Write-Host '' Show-Prose 'To undo: The original printer and driver are untouched if you added a second queue rather than replacing it -- delete the test queue when finished.' 'DarkGray' Write-Rule