Windows Printserver - Batch Datei vor dem Drucken starten

Stefan 0815

Enthusiast
Thread Starter
Mitglied seit
18.02.2013
Beiträge
659
Hallo da draußen,

Mein Drucker, der aktuell noch an der Fritzbox hängt, verbraucht leider im Jahr relativ viel Strom im Standby. Da der Drucker allerdings relativ weit weg von allem steht, ist es für mich nicht möglich, ihn erst vor einem Druckauftrag anzuschalten.

Mittlerweile habe ich es geschafft Funksteckdosen durch den Server anzusteuern, da ist mir die Idee gekommen die Printserverfunktionalität vielleicht in den Server zu verlagern. Das Funktioniert allerdings nur wenn ich es schaffe, eine Batchdatei vor jedem Druckauftrag zu starten.

Vielleicht hat jemand ja eine Idee wie ich diese Problem lösen kann.

Wenn Interesse besteht, wie ich die Steckdosen ansteuere, dann kann ich mal einen getrennten Beitrag verfassen.


Grüße aus Berlin, Stefan
 
Wenn Du diese Anzeige nicht sehen willst, registriere Dich und/oder logge Dich ein.
Nur dass ich das richtig verstehe: Du willst also dass wenn ein Druckauftrag in den Server kommt er vorher ein Script ausführt dass den Funksteckdosen sagt dass sie den Drucker anschalten können?
Zwei Lösungswege fallen mir da spontan ein: Auf den Clients es irgendwie hin bekommen das beim Drucken auf Drucker X vorher das Script ausgeführt wird, das Script macht dann Remote Powershell oder ähnliches auf den Server oder spricht die Funksteckdosen (Wirklich "Funk"? Oder meinst du Netzwerk-Steckdosen?) direkt an.
Andere Möglichkeit wäre die Druckerwarterschlange auf dem Server mit einem Script zu überwachen und sofern ein neuer Auftrag ankommt dann das Funksteckdosen-Script zu starten.

Hier sollte sich sicherlich etwas nützliches dafür finden lassen:
https://www.google.de/search?hl=de&q=windows+print+queue+script

Funksteckdosen verbrauchen auch Strom. Bist du dir sicher dass durch den Einsatz eines weiteren Verbrauchers am Ende wirklich Strom sparst? Wie hoch ist denn die Differenz?
Ich glaube kaum dass es wirtschaftlich ist diesen ganzen Aufwand überhaupt zu betreiben. Wenn es dir natürlich Spaß macht und du es als Hobby siehst, Okay. Aber wirtschaftlich ist es bestimmt nicht. ;)
 
Zuletzt bearbeitet:
Ja, es sind wirklich ganz einfache Funksteckdosen (pro Dose 3,3€ und unter 1W Verbrauch). Der Laserdrucker schluckt mindestens 7W im Standby und dies schon einige Jahre.

Wenn muss das Skript schon auf dem Server laufen, da ich nicht überall Konfigurationsaufwand haben möchte.
Die Möglichen Komandos sehen eigentlich relativ vielversprechend aus, vielen Dank für den richtigen Suchbegriff der auf Anhieb gepasst hat.

Gefunden habe ich nun folgenden Befehl:

Code:
To list all current print jobs in the queue for the local printer named ColorPrinter_2, type:

Cscript Prnjobs.vbs -l -p ColorPrinter_2

Wenn ich das richtig verstehe, muss ich jetzt noch eine batch Datei schreiben, die durchgehend läuft und den Status abfragt und dann entsprechend reagiert? Mit den Rückgabemöglichkeiten und Schleifenprogrammierung von batch Dateien habe ich mich noch gar nicht auseinander gesetzt, aber da gibt es sicher einige Hilfen im Netz.

Ich mache das natürlich aus Spaß an der Freude, da ich es zumindest interessant finde etwas mit den Boardmitteln von Windows zu programmieren. Immerhin erfreue ich mich gerade schon einer Komunikation zwischen Arduino und PC.
 
Zuletzt bearbeitet:
Ich mache das natürlich aus Spaß an der Freude, da ich es zumindest interessant finde etwas mit den Boardmitteln von Windows zu programmieren. Immerhin erfreue ich mich gerade schon einer Komunikation zwischen Arduino und PC.
Okay, dann durch aus legitim. Effektiv Geld sparen tut man durch den ganzen Zeitaufwand für die Einrichtung nämlich nicht. ;)

Gefunden habe ich nun folgenden Befehl:

Code:
To list all current print jobs in the queue for the local printer named ColorPrinter_2, type:

Cscript Prnjobs.vbs -l -p ColorPrinter_2

Wenn ich das richtig verstehe, muss ich jetzt noch eine batch Datei schreiben, die durchgehend läuft und den Status abfragt und dann entsprechend reagiert? Mit den Rückgabemöglichkeiten und Schleifenprogrammierung von batch Dateien habe ich mich noch gar nicht auseinander gesetzt, aber da gibt es sicher einige Hilfen im Netz.
Das wäre eine Möglichkeit, ich würde das Script dann dauerhaft laufen lassen und alle paar Sekunden die Checks durchführen lassen. Vielleicht schaust du dir dann gleich mal die Powershell an, da hat man viel mehr Möglichkeiten und kann auch .NET-Objekte verwenden. Das wäre dann quasi "poll-driven", was grundsätzlich nicht so schön ist.

Es wäre viel eleganter das Ganze event-driven zu machen, über ein Event-Trigger im Task-Scheduler (taskschd.msc).
Ich habe gerade mal in die Aufgabenplanung geschaut und folgende Trigger gefunden, schau dir mal folgendes an und recherchiere mal danach, das lässt sich sicherlich was mit anfangen:
taskschd_printer.jpg
Die passenden Events findest du in der Ereignisanzeige (eventvwr.msc), schau dir dort mal an was passiert wenn du druckst. Einsortiert ist es unter Anwendungs- und Dienstprotokolle--->Microsoft--->Windows--->PrintService .

Als Action definierst du dann einfach das Funksteckdosen-Script.
 
Zuletzt bearbeitet:
Super! ich hätte da auch mal nachschauen können. Das Aquariumlicht läuft übrigens schon über den Aufgabeplaner zuverlässig seit 2 Wochen.

Wenn ich das richtig sehe, muss ich dort auf ein Event triggern, dass ich vom Print Spooler bekomme.
Schön wäre es natürlich wenn ich rausbekommen könnte welche Fehlermeldung bei einem Druckauftrag ohne angeschlossenem Drucker entsteht.

Vermutlich ist aber folgende Meldung schon nahe dran:

Code:
372:

The document %1, owned by %2, failed to print on printer %3. Try to print the document again, or restart the print spooler.
Data type: %4. Size of the spool file in bytes: %5. Number of bytes printed: %6. Total number of pages in the document: %7. Number of pages printed: %8. Client computer: %9. Win32 error code returned by the print processor: %10. %11
 
Zuletzt bearbeitet:
Code 372 sieht doch schon mal ganz gut aus. Es gibt auch irgendwo eine Liste mit allen Codes, ich finde sie gerade auf die schnelle nicht.

Du müsstest darauf hin das Funksteckdosen-Script starten, dann einen Delay einbauen damit der Drucker Zeit hat um hochzufahren und dann den Spooler neu starten sofern er es nicht automatisch tut. Das kannst du entweder direkt in das Script einbauen oder über den Taskmanager machen.

Wenn du noch mehr Strom sparen willst und Spaß am Basteln hast, kauf dir doch einen Raspberry Pi. Müsstest dann natürlich Linux verwenden, einen Printserver kann man mit Samba auch bereitstellen. Statt Aufgabenplanung gibt es Cronjobs.

Wikipedia: Raspberry Pi
Google Suche: raspberry+pi+home+automation+arduino
Google Suche: raspberry+pi+print+server
 
Zuletzt bearbeitet:
Der Printserver läuft momentan ja schon über die Fritzbox ausreichend zuverlässig. Insgesammt greifen zwei Wohngemeinschaften auf den Server zu, sodass es schon Sinn macht jenen nicht dauern hoch und runter zu fahren. Mit einem Rasperry habe ich schon seit ich die Farnell Werbung mal gesehen habe geliebäugelt, aus mangelnder Zeit habe ich das jedoch bisher verworfen. Denn leider muss ich mit meiner Zeit mehr sparen als noch vor einigen Jahren, und die früheren langzeit Bastelprojekte sind nun Berufsprojekte . Daher bevorzuge ich momentan eher so "kleinere" Problemstellungen zu lösen, als eine ganz neue Tür aufzuschlagen.

Die Steckdosengeschichte hat mich weniger als einen Abend gekostet.
 
Okay, wenn der Drucker schon an einer Fritz!Box ist dann macht ein Raspberry Pi natürlich nicht viel besser, dachte du hättest den Drucker an einem Windows Server.

Vielleicht gibt es auch noch einen direkten Weg, eventuell auch irgendwie über virtuelle Drucker, ein Script nach einem Druckauftrag auszuführen. Hab dazu aber auf die schnelle nichts finden können.

Ansonsten kannst du das ganze auch auf der Fritz!Box machen, das hätte den Vorteil dass du auf den Clients keine Veränderungen vornehmen musst sondern die Fritz!Box alles handelt.
Dazu würde es sich anbieten vorher Freetz zu installieren, dann hast du vernünftigen SSH-Zugriff.

Die Suchbegriffe hierfür wären "monitor samba printer queue" oder "monitor cups printer jobs" oder eventuell auch gemischt. Aber wie schon gesagt, vorher müsstest du Freetz installieren. Danach kannst du nach ganz normalen Lösungen für Linux bzw. Samba/CUPS suchen, das wird dort nämlich verwendet.
 
Zuletzt bearbeitet:
Der Server läuft als Dateiserver sowieso im Flur. Der Drucker steht darüber. Die Fritzbox kann natürlich kein solches Skript ausführen beim Drucken, daher wollte ich den Drucker über den Server laufen lassen, eben weil ich dort mehr Möglichkeiten habe. Insgesammt gefällt mir Windows 2012 Server ganz gut, weil man einfach viel zusammenklicken kann.

Die Fritte ist von Kabeldeutschland, dort werde ich mich davor hüten eine Alternativsoftware zu installieren, ich bin ja schon froh darüber, dass die mittlerweile überhaupt läuft.

Mit dem Aufgabenplaner habe ich mir nun folgendes "Skript" zusammengebastelt:

Code:
<QueryList>
  <Query Id="0" Path="Microsoft-Windows-PrintService/Admin">
    <Select Path="Microsoft-Windows-PrintService/Admin">*[System[(Level=1  or Level=2 or Level=3 or Level=4 or Level=0 or Level=5)]]</Select>
    <Select Path="Microsoft-Windows-PrintService/Operational">*[System[(Level=1  or Level=2 or Level=3 or Level=4 or Level=0 or Level=5)]]</Select>
  </Query>
</QueryList>

Damit müsste das Ereignis eigentlich eintreffen für alle möglichen Print Spooler Rückgaben. Leider wird das Event noch nicht ausgeführt, wenn ich eine Seite Drucke (egal ob der Drucker aus oder an ist).

---------- Post added at 21:46 ---------- Previous post was at 21:22 ----------

So ich lerne dazu ;-P Mittlerweile habe ich die Ereignisanzeige gefunden und mich zum Printservice durchgesucht.
Leider musste ich feststellen, dass dort keine Ereignisse der letzten Minuten aufgezeichnet wurden.
Das Ereignisskript scheint aber allgemein zu funktionieren. Wenn ich den Standarddrucker ändere geht die Steckdose an.

Auch wenn ich mein Problem nicht gelößt habe, wird mir der tiefere Einblick in die Ereignisanzeige sicher helfen (Vielleicht ist es ja möglich auf ähnlichem wege die Stereoanlage anzuschalten wenn ein Ton abgespielt wird etc...)
 
So ich lerne dazu ;-P Mittlerweile habe ich die Ereignisanzeige gefunden und mich zum Printservice durchgesucht.
Leider musste ich feststellen, dass dort keine Ereignisse der letzten Minuten aufgezeichnet wurden.
Hast du mal auf Aktion--->Aktualisieren geklickt? ;)
Das Ereignisskript scheint aber allgemein zu funktionieren. Wenn ich den Standarddrucker ändere geht die Steckdose an.
Dann müsste man nur noch die passende Ereignis-ID finden. Vielleicht hat jemand dazu eine Idee. 372 funktioniert sicher nicht?
 
Zuletzt bearbeitet:
Als ich den Button Aktualisieren gefunden habe, hab ich auch gedacht "das wars". Leider war es das doch nicht.
Gibt es vielleicht die Möglichkeit sich ALLE ereignisse anzuschauen ohne in die Unterordner zu gehen?
Oder ist das bereits die Ansicht "Anwendung"

Anwendung.png
 
Zuletzt bearbeitet:
Wenn du mal nur auf Windows-Protokolle klickst siehst du dass in den Kategorieren unterschiedliche Mengen an Events gelistet sind.
PrintService wird unter der Standardmäßig vergebenen benutzerdefinierten Ansicht "administrative Ereignisse" mit angezeigt. Da ist eigentlich alles wichtige drin.

Aktion ---> Benutzerdefinierte Ansicht erstellen ---> Per Quelle ---> PrintService würde z.B. das selbe machen wie das in der Ordnerstruktur.

Wenn du "Alle" haben willst könntest du auf Aktion ---> Benutzerdefinierte Ansicht erstellen ---> Per Protokoll gehen und überall ein Häkchen setzen, auch oben bei Kritisch, Warnung usw.
 
Zuletzt bearbeitet:
Leider wird kein Ereignis was irgendwie zum Drucker zuzuordnen wäre registriert. Sehr schade ;-(

---------- Post added at 23:46 ---------- Previous post was at 23:07 ----------

Ich habe es nun mit dem Programmieren der BAT datei probiert.
Durch Aufrufen der richtigen vbs Datei bekomme ich folgende Rückmeldung:

Code:
C:\Windows\System32\Printing_Admin_Scripts\de-DE>Cscript prnjobs.vbs -l -p "KyoceraFS-1020D"
Microsoft (R) Windows Script Host, Version 5.8
Copyright (C) Microsoft Corporation 1996-2001. Alle Rechte vorbehalten.


Anzahl der aufgelisteten Druckaufträge 0
Jetzt beginnt mein Problem, wie speichere ich die Zahl der Druckaufträge denn in eine Variable? Es könnte ja auch sein das die Rückgabe nur aus dem Text den ich sehe besteht, sodass eine Variable zunächst aus ASCI Zeichen besteht.
 

Ähnliche Themen

Hardwareluxx setzt keine externen Werbe- und Tracking-Cookies ein. Auf unserer Webseite finden Sie nur noch Cookies nach berechtigtem Interesse (Art. 6 Abs. 1 Satz 1 lit. f DSGVO) oder eigene funktionelle Cookies. Durch die Nutzung unserer Webseite erklären Sie sich damit einverstanden, dass wir diese Cookies setzen. Mehr Informationen und Möglichkeiten zur Einstellung unserer Cookies finden Sie in unserer Datenschutzerklärung.


Zurück
Oben Unten refresh