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...
<#
.SYNOPSIS
This is a powershell script which will monitor the print queue and log the data (Owner, Date and Queue) to a Log File.
.Description
Author:John McCabe
Email: john.mccabe@microsoft.com
This Code is in no way affliated to Microsoft and Therefor by using this code Microsoft accepts no liability.
.Example
Example 1
.\PrinterQueueMonitor.ps1
Example 2
.\PrinterQueueMonitor.ps1 -computername printsrv01 -timer 10
#>
#Input Parameters
param ([parameter(mandatory=$true)] [string]$computername,[parameter(mandatory=$true)] [int]$timer,$inputpath)
function testexist
{
param($path)
$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
}
else
{
$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
}
else
{
$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
}
Comments
- Anonymous
October 02, 2012
i found the code is replacing the log file instead of appending. :)