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-ID: 270180

Url: https://administrator.de/forum/server-2012-r2-wie-die-ausgabe-von-druckauftraegen-zeitlich-verzoegern-270180.html

Ausgedruckt am: 22.04.2025 um 02:04 Uhr

emeriks
emeriks 24.04.2015 um 16:55:43 Uhr
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.
114757
114757 24.04.2015 aktualisiert um 17:15:21 Uhr
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
itsklave
itsklave 24.04.2015 um 17:38:39 Uhr
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
itsklave
itsklave 24.04.2015 um 17:40:38 Uhr
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
colinardo
colinardo 24.04.2015 aktualisiert um 19:39:49 Uhr
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
jsysde
jsysde 25.04.2015 um 08:34:16 Uhr
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
emeriks
emeriks 25.04.2015 um 16:40:52 Uhr
Goto Top
@jsysde
Danke für den Tip!

E.