Print Jobs Stuck Until You Restart the Print Spooler
Print jobs that sit at Ready in the queue until the Print Spooler service is restarted, and that print again for a while after a reboot, often point at the connection between the PC and the printer and not at the document. This post covers how to tell a spooler crash apart from a spooler that is running but can't reach the printer, how to check the printer port, and how to move the printer to a port that points at a fixed address.
A recent ElevenForum thread had this on a Windows 11 PC with a wireless printer. Every job stayed at Ready until the spooler was restarted, a reboot fixed it for a few days, and other devices printed to the same printer through the same router without a problem.
Find out whether the spooler is crashing
Check the service state first, while a job is stuck.
Get-Service Spooler | Select-Object Status,StartType
A status of Running with a stuck job means the spooler is up and the job isn't leaving the PC. A status of Stopped means the spooler stopped on its own, and the System log records it. List the Service Control Manager entries that name the spooler.
Get-WinEvent -FilterHashtable @{LogName='System'; ProviderName='Service Control Manager'} -MaxEvents 300 | Where-Object Message -like '*Print Spooler*' | Select-Object TimeCreated,Id,Message
Entries that say the Print Spooler service terminated unexpectedly mean the process crashed. Look in the Application log for an Application Error entry at the same minute that names spoolsv.exe, and note the faulting module it lists.
Get-WinEvent -FilterHashtable @{LogName='Application'; ProviderName='Application Error'} -MaxEvents 100 | Where-Object Message -like '*spoolsv.exe*' | Select-Object TimeCreated,Message
A faulting module that belongs to a printer vendor points at the driver. Update the driver from the printer maker, or switch the printer to a Windows in-box driver if the current one is already the latest. Microsoft's printing troubleshooting guide also covers old files in C:\Windows\System32\spool\PRINTERS and extra service dependencies, which can both cause spooler crashes.
Check the job and the port when the spooler is running
List the jobs in the queue with their status.
Get-PrintJob -PrinterName "Your Printer Name" | Select-Object Id,DocumentName,JobStatus,SubmittedTime
Replace Your Printer Name with the name shown in Settings > Bluetooth & devices > Printers & scanners. Then list each printer with the port and driver it uses.
Get-Printer | Select-Object Name,PortName,DriverName
A port name that starts with WSD means the printer was added through network discovery. Windows reaches a WSD printer through Web Services for Devices and identifies it by its device ID rather than by a fixed address. The WSD port monitor listens for events from the printer and updates the printer status from them (WSDMON port monitor). A port named after an IP address is a Standard TCP/IP port, which sends every job to that one address.
When the printer uses a WSD port, it's likely that the PC loses track of the printer after sleep or after the printer gets a new address from the router.
Turn on the print log while you test
The PrintService Operational log records what the spooler does with each job. Microsoft's guidance is to turn it on only while troubleshooting, because it writes many events on a busy print server. Turn it on from an elevated prompt.
wevtutil sl Microsoft-Windows-PrintService/Operational /e:true
Send one test print right after the PC wakes from sleep, and one after restarting the spooler. Open Event Viewer and go to Applications and Services Logs > Microsoft > Windows > PrintService > Operational. Compare the entries for the job that printed with the entries for the job that stayed at Ready. The step where the stuck job stops is where the problem is. Also check the Admin log in the same folder for errors at the same time. Turn the Operational log off when you're done.
wevtutil sl Microsoft-Windows-PrintService/Operational /e:false
Move the printer to a TCP/IP port
Reserve an IP address for the printer in the router's DHCP settings first, so the address doesn't change. Print a configuration page from the printer's own menu to read its current address.
Add the printer again by its address in Settings > Bluetooth & devices > Printers & scanners > Add device > Add manually > Add a printer using an IP address or hostname. Choose TCP/IP Device and enter the reserved address. The same steps in PowerShell create the port and a printer that uses the driver already installed.
Add-PrinterPort -Name "192.168.1.50" -PrinterHostAddress "192.168.1.50" Add-Printer -Name "Office Printer (IP)" -DriverName "Driver Name From Get-Printer" -PortName "192.168.1.50"
Replace the address with the one you reserved, and the driver name with the DriverName value from Get-Printer. When the wizard shows a port name with _1 on the end, a port with that address already exists on the PC, and the wizard made a second one.
Adding the printer this way creates a second printer next to the WSD one. Print a test page to the new printer, then remove the WSD printer so nothing keeps sending jobs to it.
Remove-Printer -Name "Name Of The WSD Printer"
Set the new printer as the default, put the PC to sleep, wake it, and print again. A job that prints without a spooler restart after a few sleep cycles confirms the port was the cause.
Where ET Ducky shows it
I build ET Ducky, and its Windows agent reads the kernel event stream through ETW. It attributes every outbound connection to the process that opened it, so you can see whether spoolsv.exe connects to the printer's address when a job is sent.
You'd start a Live Session on the PC right after it wakes and send a test print. The AI picks the ETW providers for each round of the investigation, and only counts-only summaries leave the PC while the raw kernel events stay on it. When several PCs in an office have the same problem, a Multi-Agent Session across a PC that prints and one that doesn't compares the kernel events from both to find the outlier. You can also open a Live Session shell from the browser without the need for a VPN and run the PowerShell commands above on each PC.
Try it on one server
One Windows or Linux server on the Free query tier with your own AI key costs $5 a month.
See pricing