Skip to main content

Repair Print Spooler

Summary

This script resets the Print Spooler service, checks and starts necessary dependencies, and logs the service status before and after repair. Use this script to troubleshoot and repair common issues with the Print Spooler service. CW RMM implementation of the agnostic script Repair-PrintSpooler.

Sample Run

Sample Run 1
Sample Run 2
Sample Run 3

Dependencies

Repair-PrintSpooler.ps1

User Parameters

NameExampleRequiredTypeDescription
ClearQueue0/1FalseFlagOptional flag to clear the print queue.

User Parameters Image

Task Creation

Create a new Script Editor style script in the system to implement this task.

Task Creation 1
Task Creation 2

Name: Repair Print Spooler
Description: This script resets the Print Spooler service, checks and starts necessary dependencies, and logs the service status before and after repair.
Category: Custom

Task Creation 3

Parameters

ClearQueue

Add a new parameter by clicking the Add Parameter button present at the top-right corner of the screen.

Add Parameter

This screen will appear.
Parameter Screen

  • Set ClearQueue in the Parameter Name field.
  • Select Flag from the Parameter Type dropdown menu.
  • Click the Save button.

Parameter Settings

Task

Navigate to the Script Editor section and start by adding a row. You can do this by clicking the Add Row button at the bottom of the script page.

Add Row

A blank function will appear.
Blank Function

Row 1 Function: PowerShell Script

Search and select the PowerShell Script function.

PowerShell Selection 1
PowerShell Selection 2

The following function will pop up on the screen:
PowerShell Function

Paste in the following PowerShell script and set the Expected time of script execution in seconds to 300 seconds. Click the Save button.

#region parameters
$ClearQueue = '@ClearQueue@'
if ( $ClearQueue -match '1|Yes|True' ) {
$Parameters = @{
ClearQueue = $true
}
}
#endregion
#region Setup - Variables
$ProjectName = 'Repair-PrintSpooler'
[Net.ServicePointManager]::SecurityProtocol = [enum]::ToObject([Net.SecurityProtocolType], 3072)
$BaseURL = 'https://file.provaltech.com/repo'
$PS1URL = "$BaseURL/script/$ProjectName.ps1"
$WorkingDirectory = "C:\ProgramData\_automation\script\$ProjectName"
$PS1Path = "$WorkingDirectory\$ProjectName.ps1"
$WorkingPath = $WorkingDirectory
$LogPath = "$WorkingDirectory\$ProjectName-log.txt"
$ErrorLogPath = "$WorkingDirectory\$ProjectName-Error.txt"
#endregion
#region Setup - Folder Structure
New-Item -Path $WorkingDirectory -ItemType Directory -ErrorAction SilentlyContinue | Out-Null
$response = Invoke-WebRequest -Uri $PS1URL -UseBasicParsing
if (($response.StatusCode -ne 200) -and (!(Test-Path -Path $PS1Path))) {
throw "No pre-downloaded script exists and the script '$PS1URL' failed to download. Exiting."
} elseif ($response.StatusCode -eq 200) {
Remove-Item -Path $PS1Path -ErrorAction SilentlyContinue
[System.IO.File]::WriteAllLines($PS1Path, $response.Content)
}
if (!(Test-Path -Path $PS1Path)) {
throw 'An error occurred and the script was unable to be downloaded. Exiting.'
}
#endregion
#region Execution
if ($Parameters) {
& $PS1Path @Parameters
} else {
& $PS1Path
}
#endregion
#region log verification
if ( !(Test-Path $LogPath) ) {
throw 'PowerShell Failure. A Security application seems to have restricted the execution of the PowerShell Script.'
}
if ( Test-Path $ErrorLogPath ) {
$ErrorContent = ( Get-Content -Path $ErrorLogPath )
throw $ErrorContent
}
Get-Content -Path $LogPath
#endregion

PowerShell Execution

Row 2 Function: Script Log

Add a new row by clicking the Add Row button.
Add Row 2

A blank function will appear.
Blank Function 2

Search and select the Script Log function.
Script Log Selection

The following function will pop up on the screen:
Script Log Function

In the script log message, simply type %Output% and click the Save button.
Script Log Save

Click the Save button at the top-right corner of the screen to save the script.
Save Script

Completed Script

Completed Script

Output

  • Script log