itsklave
Goto Top

Server 2012 R2: Wie die Ausgabe von Druckaufträgen zeitlich verzögern?

Guten Abend!

Ich habe bereits einige Foren gewälzt, aber so wirklich vermag ich keine Lösung zu finden:
Wie kann ich die Ausgabe von Druckaufträgen über Windows Server 2012 R2 zeitlich verzögern?

Es ist gefordert, dass jeder Druckauftrag erst nach 15 Minuten ausgeführt wird.

Beste Grüße
Jan

Content-Key: 270180

Url: https://administrator.de/contentid/270180

Printed on: April 24, 2024 at 16:04 o'clock

Member: emeriks
emeriks Apr 24, 2015 at 14:55:43 (UTC)
Goto Top
Hi,
kannst Du bitte mal erläutern, woher diese Anfordrung kommt? Vielleicht kann man Dir dann Ansätze vorschlagen.

AFAIK geht das nicht.

E.
Mitglied: 114757
114757 Apr 24, 2015 updated at 15:15:21 (UTC)
Goto Top
Moin,
das ließe sich z.B. mit einem Powershell Script machen, welches die Printjobs via WMI-Eventsubscriber überwacht und dann pausiert und in einem Array mit der Zeit speichert. Das Script prüft dann regelmäßig das Array und gibt über das CMDLet Resume-Job den Druckauftrag zum gewünschten Zeitpunkt wieder frei.

Wäre also machbar, schätze so max. 20-30 Zeilen Code.

Gruß jodel32
Member: itsklave
itsklave Apr 24, 2015 at 15:38:39 (UTC)
Goto Top
Hallo emeriks,
das ganze ist eine Anforderung unserer Geschäftsführung.

Diese Zwangspause soll die Mitarbeiterinnen und Mitarbeiter dazu bewegen, erst zu überlegen, ob ein Dokument wirklich gedruckt werden muss.

Gruß
Jan
Member: itsklave
itsklave Apr 24, 2015 at 15:40:38 (UTC)
Goto Top
Hallo jodel32,
vielen Dank für die geistige Unterstützung. Das klingt tatsächlich nach einer praktikabelen und einfachen Lösung.

Ich werde mich einmal an der Umsetzung des ganzen versuchen. Vielen, vielen Dank! face-smile

Gruß
Jan
Member: colinardo
colinardo Apr 24, 2015 updated at 17:39:49 (UTC)
Goto Top
Zitat von @114757:
das ließe sich z.B. mit einem Powershell Script machen
Hallo itsklave, Willkommen auf Administrator.de!
Das könnte dann nach @114757 's Muster etwa aussehen (ohne Funktionsgarantie da ungefähr aus dem Kopf skizziert, werde das beizeiten mal testen):
# Zeit in Minuten nach dem ein Druckjob freigegeben wird (Berechnungsgrundlage ist die Win32_Printjob Eigenschaft 'TimeSubmitted') 
$time = 15

# EventSubscriber löschen falls vorhanden
get-EventSubscriber | ?{$_.SourceIdentifier -eq "printwatcher"} | Unregister-Event -Force  

# Alle Drucker anhalten (pausieren)
gwmi Win32_Printer | %{$_.Pause() | out-null}

$action = {
    $job = $event.SourceArgs.NewEvent.TargetInstance
    $jobID = $job.JobID
    # neue Druck-Jobs pausieren
    gwmi Win32_Printjob -Filter "JobID = '$jobID'" | %{$_.Pause()}  
}
# Event Subscriber registieren
register-wmievent -query "Select * From __InstanceCreationEvent within .1 Where TargetInstance ISA 'Win32_printjob'" -action $action -sourceidentifier "printwatcher" | out-null  

Write-Host "Warte auf neue Print-Jobs" -ForegroundColor Green  

# Schleife die die PrintJobs je nach Übermittlungszeit freigibt
While($true){
    gwmi Win32_Printjob | ?{$_.ConvertToDateTime($_.TimeSubmitted) -le (get-date).AddMinutes(-$time) -and $_.StatusMask -band 0x1} | %{
        try{
            # Druckername des Jobs extrahieren
            $printer = $_.Name.split(",")  
            write-host "Gebe Druckjob mit der ID '$($_.JobID)' auf Drucker '$printer' zum Druck frei"  
            # Drucker wieder aus der Pause holen
            gwmi Win32_Printer -Filter "Name = '$printer'" | %{$_.Resume()|out-null}  
            # Druckjob wieder aufnehmen
            $_.Resume() | out-null
            # Drucker wieder anhalten
            gwmi Win32_Printer -Filter "Name = '$printer'" | %{$_.Pause()|out-null}  
        }catch {
            write-host $_.Exception.Message -ForegroundColor Red
        }
    }
    # Pause (s) zwischen den Überprüfungen der angehaltenen Printjobs
    sleep(5)
}
Grüße Uwe
Member: jsysde
jsysde Apr 25, 2015 at 06:34:16 (UTC)
Goto Top
Moin.
Zitat von @itsklave:
Diese Zwangspause soll die Mitarbeiterinnen und Mitarbeiter dazu bewegen, erst zu überlegen, ob ein Dokument wirklich
gedruckt werden muss.

Mir ist zwar nicht klar, was 15 Minuten Verzögerung am Verhalten der Mitarbeiter ändern sollen, aber wenn das ganze mehr als einen Drucker/einen Standort betrifft, würde ich mir mal sog. "Follow-Me-Printing"-Systeme anschauen wie z.B. PaperCut.

Grob gesagt sieht das so aus: Es gibt nur noch eine (virtuelle) Druckerwarteschlange (oder zwei, z.B. eine für Farbdrucke und eine für S/W), die steht per default auf "Hold", es wird nichts direkt gedruckt. Das ganze lässt sich dann mit einer Authentifizierung versehen, so daß User A nach Eingabe seiner PIN (Vorhalten seiner SmartCard, ....) seine Druckaufträge an einem beliebigen Drucker rauslassen kann. "Nebenbei" lassen sich damit prima Statistiken über Druckverhalten und -verbräuche erstellen und so einiges mehr.... face-wink

Wir setzen das an einem unserer Standorte ein, nach anfänglichem Ungemach (der Mensch ist ein Gewohnheitstier) klappt das mittlerweile prima und der Papierverbrauch ist deutlich gesunken. Die Vorhaltezeit, die "gedruckte" Dokumente auf dem Server gehalten werden, lässt sich dabei variabel einstellen; wir haben 240 Minuten eingestellt - hast du also etwas gedruckt und nicht binnen vier Stunden am Drucker rausgelassen und abgeholt, wird der Druck automatisch gelöscht.

Kombiniert man so etwas mit Printer-Defaults wie doppelseitigem Druck ist die Papierersparnis doch sehr groß.

Cheers,
jsysde
Member: emeriks
emeriks Apr 25, 2015 at 14:40:52 (UTC)
Goto Top
@jsysde
Danke für den Tip!

E.