So this one is related to my recent blog about documenting printers; right after the blog I got some comments that I never focused on printer monitoring. I think that’s because printers have a mental block in my mind as I see them as pure evil. 🙂
But without jokes; of course we can monitor printers and print queues. We have some clients that printing is a key part of business so I’ve created the monitoring component below. This monitors both the printer status(e.g. offline/error/no toner, etc) and the Job status. Sometimes jobs get stuck in the queue blocking all others so it’s a good one to cover.
The Script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
$Printers = get-printer
$PrintStatus = foreach ($Printer in $Printers) {
$PrintJobs = get-PrintJob -PrinterObject $printer
$JobStatus = foreach ($job in $PrintJobs) {
if ($Job.JobStatus -ne "normal") { "Not Healthy - $($Job)" }
}
[PSCustomObject]@{
PrinterName = $printer.Name
PrinterStatus = $Printer.PrinterStatus
PrinterType = $Printer.Type
JobStatus = $JobStatus
}
}
$PrintersNotNormal = $PrinterStatus.PrinterStatus | Where-Object { $_.PrinterStatus -ne "normal" }
if (!$PrintersNotNormal) {
write-host "Healthy - No Printer Errors found"
}
else {
Write-Host "Unhealthy - Printers with errors found."
$PrintersNotNormal
}
$JobsNotNormal = $PrinterStatus.PrinterStatus | Where-Object { $_.JobStatus -ne "normal" -and $_.JobStatus -ne $null }
if (!$JobsNotNormal) {
write-host "Healthy - No Job Errors found"
}
else {
Write-Host "Unhealthy - JJobs with errors found."
$JobsNotNormal
}
|
And that’s it! a simple but short one. I’ll be posting some more information about my bigger project AzPam somewhere in December. For next week I have some Azure Function stuff planned – One of them being a method to join a Microsoft Teams meeting, using a code instead of a super long URL. 🙂
As always, Happy PowerShelling!