Simple Print Queue Monitor - Powershell

its taking me a long time to get back to this... been super busy in work which is always a good thing!

here is some sample code which will allow you to create a very simple print queue monitor and log the details out to a csv file for further manipulation...



This is a powershell script which will monitor the print queue and log the data (Owner, Date and Queue) to a Log File.


Author:John McCabe

This Code is in no way affliated to Microsoft and Therefor by using this code Microsoft accepts no liability.


Example 1


Example 2

    .\PrinterQueueMonitor.ps1 -computername printsrv01 -timer 10


#Input Parameters

param ([parameter(mandatory=$true)] [string]$computername,[parameter(mandatory=$true)] [int]$timer,$inputpath)

function testexist

    $tester = test-path $path
    return $tester


function capturewmi
    param ($wmi,$logpath,$time)
    #capture the current Print Job Queue
    $capture = Get-WmiObject $wmi
    #Capture the current time / date stamp
    write-host "." -NoNewline
    $date = get-date
    #process all the jobs in the queue
    foreach ($capt in $capture)
        #Create a new object to help us output the format correctly

        $outputobj = New-Object psobject
        #Add the values and names for exporting the information later on
        Add-Member -InputObject $outputobj -MemberType NoteProperty -Name Date -Value $date
        Add-Member -InputObject $outputobj -MemberType NoteProperty -Name Queue -Value $capt.Name
        Add-Member -InputObject $outputobj -MemberType NoteProperty -Name Owner -Value $capt.owner

        if ($append -eq $true)
            #export to a csv for log creation and manipulation later on
            $outputobj |export-csv $logpath -Append
            $outputobj |export-csv $logpath -Force

    #stop processing for a period of time
    sleep $time


write-host "Welcome To The Print Queue Monitor Script" -fore Green -back black
write-host "This Code is Posted as is and no support from Microsoft will be given for this code" -Fore green -back black

#Static Variables
$wmiclass = "Win32_PrintJob"
$logdir = $env:USERPROFILE + "\Desktop\PrintJob\"

$testdir = testexist $logdir

#Create the Directory if it does not exist
if ($testdir -eq $false)
    New-Item -ItemType directory -path $logdir

#Generate the Log File name
$logfile = $computername + "_PrintJobLog.txt"
$logs = $logdir + $logfile

#Test if the log exists, append to existing log file if it exists
$testfile = testexist $logs

if ($testfile -eq $true)
    $append = $true
    $append = $false

#create reference for infinite loop
$nolimit = 0

#begin infinite loop

write-host "Press CTRL-C at any point to stop Data Capture" -fore yellow -back black
write-host "Check $logs to review print queue jobs and owners" -fore yellow -back black
write-host "Beginning Capture...." -fore green -back black

while ($nolimit -eq 0)
    capturewmi $wmiclass $logs $timer