Public/Printing/Get-StuckPrintJobs.ps1
<#
Copyright © 2024 Integris. For internal company use only. All rights reserved. #> FUNCTION Get-StuckPrintJobs { <# .SYNOPSIS Retrieves stuck print jobs for a specified printer or all printers. .DESCRIPTION This function retrieves stuck print jobs for a specified printer or all printers. If stuck print jobs are found, it displays their details and returns the list of jobs. If no stuck print jobs are found, it displays an appropriate message and returns $null. .PARAMETER Name Specifies the name of the printer for which to retrieve stuck print jobs. .PARAMETER All Indicates that the function should retrieve stuck print jobs for all printers. .EXAMPLE Get-StuckPrintJobs -Name "Printer1" Retrieves and displays stuck print jobs for the printer named "Printer1". .EXAMPLE Get-StuckPrintJobs -All Retrieves and displays stuck print jobs for all printers. .INPUTS System.String. The function accepts a string input for the printer name. System.Management.Automation.SwitchParameter. The function accepts a switch parameter to retrieve jobs for all printers. .OUTPUTS Returns a count of stuck print jobs. .NOTES Ensure you have the necessary permissions to query print job information. #> [CmdletBinding(DefaultParameterSetName = 'ByName')] param ( [Parameter(Position = 0, Mandatory = $true, ParameterSetName = 'ByName', ValueFromPipeline = $true)] [string]$Name, [Parameter(ParameterSetName = 'All')] [switch]$All ) process { if ($PSCmdlet.ParameterSetName -eq 'All') { $printers = Get-Printer foreach ($printer in $printers) { $jobs = Get-PrintJob -PrinterName $printer.Name if ($jobs) { Write-Host "Stuck print jobs found for printer '$($printer.Name)':" $jobs | ForEach-Object { Write-Host "Job ID: $($_.ID), Document: $($_.DocumentName), Status: $($_.JobStatus)" } RETURN ($jobs | Measure-Object).Count } else { Write-Host "No stuck print jobs for printer '$($printer.Name)'." RETURN ($jobs | Measure-Object).Count } } } else { $jobs = Get-PrintJob -PrinterName $Name if ($jobs) { Write-Host "Stuck print jobs found for printer '$Name':" -ForegroundColor Red $jobs | ForEach-Object { Write-Host "Job ID: $($_.ID), Document: $($_.DocumentName), Status: $($_.JobStatus)" } RETURN ($jobs | Measure-Object).Count } else { Write-Host "No stuck print jobs for printer '$Name'." -ForegroundColor Green RETURN ($jobs | Measure-Object).Count } } } } |