Per Script alle hängenden Druckaufträge löschen
Hi,
wollte mal von Euch hören was Ihr von meinem Script haltet.
Das Script löscht alle Druckaufträge in einem Drucker die älter als X Minuten alt sind.
Ich weiß es ist nicht perfekt aber hey für den Anfang nicht schlecht.
wollte mal von Euch hören was Ihr von meinem Script haltet.
Das Script löscht alle Druckaufträge in einem Drucker die älter als X Minuten alt sind.
Ich weiß es ist nicht perfekt aber hey für den Anfang nicht schlecht.
#DruckerScript zum Automatischen löschen der festhängenden Jobs##
#################################################################
##Liste momentaner Druckjobs##"
#------------------------#
$PrinterJobs=(Get-WmiObject Win32_PerfFormattedData_Spooler_PrintQueue) | where {$_.Jobs -GT "0"} | select name
if ($PrinterJobs -eq $null){
Write-Host "Keine Druckaufträge gefunden"
;break}
##Script macht eine Pause von X Minuten##
#-----------------------------------#
sleep -Seconds 20
##Liste der Druckjobs X Minuten später##
#----------------------------------#
$PrinterJobsafterXMinutes=(Get-WmiObject Win32_PerfFormattedData_Spooler_PrintQueue) | where {$_.Jobs -GT "0"} | select Name
if ($PrinterJobsafterXMinutes -eq $null){
Write-Host "Keine Druckaufträge die hängen"
;break}
##Beide Objekte mit einander Vergleichen##
#------------------------------------#
$Compare = Compare-Object -ReferenceObject $PrinterJobs.Name -DifferenceObject $PrinterJobsafterXMinutes.Name -IncludeEqual -PassThru | where {$_.SideIndicator -Like "=="}
cls
##_Total aus der Tabelle nehmen##
#---------------------------#
$PrinterList = $Compare | Where -FilterScript {$_ -notlike "*Total"}
##Druckaufträge der Porblemdrucker löschen##
#--------------------------------------#
foreach ($Printer in $PrinterList){
Write-Host "Für den Drucker ""$Printer"" werden die Druckaufträge gelöscht" -ForegroundColor Yellow -BackgroundColor Black
(Get-WMIObject -Class Win32_Printer -Filter "Name='$Printer'").CancelAllJobs()
}
>
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 221912
Url: https://administrator.de/forum/per-script-alle-haengenden-druckauftraege-loeschen-221912.html
Ausgedruckt am: 21.12.2024 um 06:12 Uhr
3 Kommentare
Neuester Kommentar
Hallo Matthias,
ich sehe du machst Fortschritte,
dein Code hat leider einen unschönen Fehler, du löschst nicht nur den hängenden Druckauftrag sondern alle gerade laufenden Aufträge auf diesem Drucker, nicht schön wenn gerade einer druckt. Außerdem ist die WMI-Klasse die du benutzt nicht gerade die Beste, hier ist die Klasse "Win32_PrintJob" besser dafür geeignet.
Dein Gewünschtes ließe sich auf dieses Script verkürzen. Es löscht Druckaufträge die vor 30 Minuten gestartet wurden und sich noch in der Warteschlange befinden und wartet dann 5 Minuten bis es erneut überprüft. Die Zeiten sollte man natürlich je nach Drucker anpassen, wenn auf bestimmten Druckern sehr lange Druckaufträge mit 1000den Seiten laufen sollten, wenn z.B einer das ISO9001 Handbuch ausdruckt .
Ab Server 2012R2 und Windows 8.1: gibt es für diese Aufgaben auch neue CMDLets
http://technet.microsoft.com/en-us/library/hh918357.aspx
happy coding
Grüße Uwe
ich sehe du machst Fortschritte,
dein Code hat leider einen unschönen Fehler, du löschst nicht nur den hängenden Druckauftrag sondern alle gerade laufenden Aufträge auf diesem Drucker, nicht schön wenn gerade einer druckt. Außerdem ist die WMI-Klasse die du benutzt nicht gerade die Beste, hier ist die Klasse "Win32_PrintJob" besser dafür geeignet.
Dein Gewünschtes ließe sich auf dieses Script verkürzen. Es löscht Druckaufträge die vor 30 Minuten gestartet wurden und sich noch in der Warteschlange befinden und wartet dann 5 Minuten bis es erneut überprüft. Die Zeiten sollte man natürlich je nach Drucker anpassen, wenn auf bestimmten Druckern sehr lange Druckaufträge mit 1000den Seiten laufen sollten, wenn z.B einer das ISO9001 Handbuch ausdruckt .
while($true){
gwmi -Class Win32_PrintJob | ?{$_.ConvertToDateTime($_.TimeSubmitted).AddMinutes(30) -lt (get-date)} | %{$_.Delete()}
sleep(300) # 5 Minuten warten
}
http://technet.microsoft.com/en-us/library/hh918357.aspx
happy coding
Grüße Uwe
Geht hier einwandfrei ....(PS3.0 auf Win7x64) hatte vielleicht nicht erwähnt das es mit der "while"-Schleife unendliche lange läuft und nach dem Befehl immer 5 Minuten wartet.
Dein Script kann so ganz und gar nicht funktionieren, zu viele Fehler ...
So geht des nach deinem Gusto
Grüße Uwe
Dein Script kann so ganz und gar nicht funktionieren, zu viele Fehler ...
So geht des nach deinem Gusto
$Jobs = get-wmiobject Win32_PrintJob
$Time = get-date # -Format 'MM/dd/yyyy hh:mm:ss'
ForEach ($Job in $Jobs){
$jobtime = $Job.ConvertToDateTime($Job.TimeSubmitted)
if ($jobtime -lt $Time.AddMinutes(-30)){
Write-Host "Das Dokument '$($Job.Document)' wird am Drucker '$($Job.Name)' gelöscht"
#$Job.Delete()
}
}