Jetdirect 170x - Printerque
Moderator: Co-Administratoren
-
- Beiträge: 239
- Registriert: 07.11.2007, 15:27
- System: Alternative CCU (auf Basis OCCU)
- Wohnort: Wien
- Hat sich bedankt: 1 Mal
Jetdirect 170x - Printerque
Also ich hatte heute nacht eine Idee.
Ich habe einen HP Drucker der mit einer Jetdirect an mein Netzwerk angestopselt ist.
Jetzt möchte ich den Drucker mittles FS20ST ein- und ausschalten. Wenn ein Printjob an die Jetdirect ankommt würde ich das gerne wissen und mittels homeputer den Drucker einschalten.
Hat jemand schon sowas gemacht?
Hat jemand mit der jetdirect 170x Erfahrungen?
danke
Ich habe einen HP Drucker der mit einer Jetdirect an mein Netzwerk angestopselt ist.
Jetzt möchte ich den Drucker mittles FS20ST ein- und ausschalten. Wenn ein Printjob an die Jetdirect ankommt würde ich das gerne wissen und mittels homeputer den Drucker einschalten.
Hat jemand schon sowas gemacht?
Hat jemand mit der jetdirect 170x Erfahrungen?
danke
---------------------------------------------
Auf mehrfachen Wunsch hier keine Inventur meiner Homematic mehr... Viele Komponenten in BEtrieb
Auf mehrfachen Wunsch hier keine Inventur meiner Homematic mehr... Viele Komponenten in BEtrieb
-
- Beiträge: 239
- Registriert: 07.11.2007, 15:27
- System: Alternative CCU (auf Basis OCCU)
- Wohnort: Wien
- Hat sich bedankt: 1 Mal
Re: Jetdirect 170x - Printerque
So mit dem 170x von HP gehts nicht, das sagt leider nicht ob etwas in der Warteschlange steht.
Nun habe ich eine andere Version:
Der Rechner wo die Homeputer Studio läuft, ist gleichzeitig mein Printer Server. Die Warteschlange kann ich mit einem modifizierten prnjobs.vbs abfragen. Die einzige Ausgabe ist die Anzahl der Dokumente in der Que.
Die Commandline sieht folgendermaßen aus: 'cscript //NoLogo e:\prnjobs1.vbs -l -o -p "HP LaserJet 6P"'
Derzeit verwende ich eine Batch-Datei, welche die Ausgabe in eine Datei umleitet. Diese Batchdatei wird von der Hoemputer Studio alle 5 Sek. (zum Test - wird später seltener) gestartet. Die Datei lese ich dann mit einem anderen Makro ein und bekomme die Anzahl der Dateien in der Warteschlange. Wenn >0 Drucker einschalten und Stoppuhr starten. Wenn =0 und Stoppuhr >10min Drucker ausschalten - Das geht schon.
Jetzt stört mich aber das aufpoppen des Fenster schon sehr. Gibt es eine Möglichkeit ein Programm in php zu starten und den Output dann direkt im Code einzulesen. Dann würde ich mir den umweg über das File ersparen.
Ich habe schon versucht:
$f=fopen('cscript //NoLogo e:\prnjobs1.vbs -l -o -p "HP LaserJet 6P"','r');
$z=fgets($f,1000);
echo $z
Da kommt ein Warning und kein Ergebnis...
Kann mir wer helfen?
Nun habe ich eine andere Version:
Der Rechner wo die Homeputer Studio läuft, ist gleichzeitig mein Printer Server. Die Warteschlange kann ich mit einem modifizierten prnjobs.vbs abfragen. Die einzige Ausgabe ist die Anzahl der Dokumente in der Que.
Die Commandline sieht folgendermaßen aus: 'cscript //NoLogo e:\prnjobs1.vbs -l -o -p "HP LaserJet 6P"'
Derzeit verwende ich eine Batch-Datei, welche die Ausgabe in eine Datei umleitet. Diese Batchdatei wird von der Hoemputer Studio alle 5 Sek. (zum Test - wird später seltener) gestartet. Die Datei lese ich dann mit einem anderen Makro ein und bekomme die Anzahl der Dateien in der Warteschlange. Wenn >0 Drucker einschalten und Stoppuhr starten. Wenn =0 und Stoppuhr >10min Drucker ausschalten - Das geht schon.
Jetzt stört mich aber das aufpoppen des Fenster schon sehr. Gibt es eine Möglichkeit ein Programm in php zu starten und den Output dann direkt im Code einzulesen. Dann würde ich mir den umweg über das File ersparen.
Ich habe schon versucht:
$f=fopen('cscript //NoLogo e:\prnjobs1.vbs -l -o -p "HP LaserJet 6P"','r');
$z=fgets($f,1000);
echo $z
Da kommt ein Warning und kein Ergebnis...
Kann mir wer helfen?
---------------------------------------------
Auf mehrfachen Wunsch hier keine Inventur meiner Homematic mehr... Viele Komponenten in BEtrieb
Auf mehrfachen Wunsch hier keine Inventur meiner Homematic mehr... Viele Komponenten in BEtrieb
-
- Ehrenmitglied
- Beiträge: 12194
- Registriert: 29.07.2006, 15:58
- Wohnort: Schweiz
- Danksagung erhalten: 5 Mal
Re: Jetdirect 170x - Printerque
Hallo Sandomor
Ich bin auch noch PHP-Anfänger. Aber versuch es doch mal so:
Viele Grüsse
Bümpi
Ich bin auch noch PHP-Anfänger. Aber versuch es doch mal so:
Code: Alles auswählen
<?
$Befehl = 'cscript //NoLogo e:\prnjobs1.vbs -l -o -p "HP LaserJet 6P"';
$AnzahlDruckJobs = exec($Befehl);
?>
Bümpi
-
- Beiträge: 239
- Registriert: 07.11.2007, 15:27
- System: Alternative CCU (auf Basis OCCU)
- Wohnort: Wien
- Hat sich bedankt: 1 Mal
Re: Jetdirect 170x - Printerque
Danke Buempi...
ich habs nun mit popen('....','r') gemacht. Damit kann man Programme starten und die Ausgabe lesen. Funktioniert mittlerweile. Allerdings geht das Schwarze Fenster auch auf - auch bei exec(). Das bekommt man nicht weg - leider
Sonst funktioniert das super und mein Drucker wird ein- und ausgeschalten.
Dnake für die Hilfe
ich habs nun mit popen('....','r') gemacht. Damit kann man Programme starten und die Ausgabe lesen. Funktioniert mittlerweile. Allerdings geht das Schwarze Fenster auch auf - auch bei exec(). Das bekommt man nicht weg - leider
Sonst funktioniert das super und mein Drucker wird ein- und ausgeschalten.
Dnake für die Hilfe
---------------------------------------------
Auf mehrfachen Wunsch hier keine Inventur meiner Homematic mehr... Viele Komponenten in BEtrieb
Auf mehrfachen Wunsch hier keine Inventur meiner Homematic mehr... Viele Komponenten in BEtrieb
-
- Ehrenmitglied
- Beiträge: 12194
- Registriert: 29.07.2006, 15:58
- Wohnort: Schweiz
- Danksagung erhalten: 5 Mal
Re: Jetdirect 170x - Printerque
Hallo Sandomor
Dieses Aufpoppen stört doch bestimmt auf die Dauer!
Ich habe mal in AutoIt ein Programm geschrieben, mit welchem man Programme minimalisiert ausführen kann. Weil du so viele Parameter benötigst, habe ich es jetzt noch etwas erweitert. Falls CSCRIPT dass Fenster nicht selber wiederherstellt, müsste es damit funktionieren. Das heisst: CSCRIPT wird minimiert gestartet und du merkst davon so gut wie gar nichts. Nur das Homeputer-Fenster verliert für einen kurzen Augenblick den Fokus.
Aus einem Homeputer-Makro startest du es wie folgt:
Ich hoffe, dass cscript die Übergabe des Druckernamens mit einfachen Anführungszeichen akzeptiert. Sonst müsstest du die Leerzeichen aus dem Druckernahmen entfernen (mit Startwin kann man ja keine " übergeben). Ferner empfehle ich dir, das Ganze in einem Pfad ohne Leerstellen abzulegen. Gibt erfahrungsgemäss weniger Probleme.
Leider konnte ich die Neue Version des Programms nicht ausführlich testen. Du bist also Beta-Tester!
Viele Grüsse
Bümpi
Edit: Wenn es mit den einfachen Anführungszeichen nicht klappt, kannst du ja den Parameter auch einfach weglassen und im Sript den Druckernamen als Konstante definieren.
Dieses Aufpoppen stört doch bestimmt auf die Dauer!
Ich habe mal in AutoIt ein Programm geschrieben, mit welchem man Programme minimalisiert ausführen kann. Weil du so viele Parameter benötigst, habe ich es jetzt noch etwas erweitert. Falls CSCRIPT dass Fenster nicht selber wiederherstellt, müsste es damit funktionieren. Das heisst: CSCRIPT wird minimiert gestartet und du merkst davon so gut wie gar nichts. Nur das Homeputer-Fenster verliert für einen kurzen Augenblick den Fokus.
Aus einem Homeputer-Makro startest du es wie folgt:
Code: Alles auswählen
** Achtung: Alles in EINER Zeile; kein Zeilenumbruch!!
Startwin(",X:\DeinPfadZuStartMin\,X:\DeinPfadZuStartMin\StartMin.exe,X:\DeinPfadZuCscript\cscript.exe //NoLogo e:\prnjobs1.vbs -l -o -p 'HP LaserJet 6P'")
Leider konnte ich die Neue Version des Programms nicht ausführlich testen. Du bist also Beta-Tester!
Viele Grüsse
Bümpi
Edit: Wenn es mit den einfachen Anführungszeichen nicht klappt, kannst du ja den Parameter auch einfach weglassen und im Sript den Druckernamen als Konstante definieren.
- Dateianhänge
-
- StartMin.zip
- (190.92 KiB) 102-mal heruntergeladen
-
- Beiträge: 239
- Registriert: 07.11.2007, 15:27
- System: Alternative CCU (auf Basis OCCU)
- Wohnort: Wien
- Hat sich bedankt: 1 Mal
Re: Jetdirect 170x - Printerque
Hallo,
danke werd heute abend testen - am WoE bin ich einfach zu nix gekommen...
lg
danke werd heute abend testen - am WoE bin ich einfach zu nix gekommen...
lg
---------------------------------------------
Auf mehrfachen Wunsch hier keine Inventur meiner Homematic mehr... Viele Komponenten in BEtrieb
Auf mehrfachen Wunsch hier keine Inventur meiner Homematic mehr... Viele Komponenten in BEtrieb
-
- Beiträge: 239
- Registriert: 07.11.2007, 15:27
- System: Alternative CCU (auf Basis OCCU)
- Wohnort: Wien
- Hat sich bedankt: 1 Mal
Re: Jetdirect 170x - Printerque
Gestern sind unsere Schwiegereltern über mich hereingefallen. Derzeit komme ich gar nicht zum Testen - melde mich sobald ich wieder an die Steuerung darf....
---------------------------------------------
Auf mehrfachen Wunsch hier keine Inventur meiner Homematic mehr... Viele Komponenten in BEtrieb
Auf mehrfachen Wunsch hier keine Inventur meiner Homematic mehr... Viele Komponenten in BEtrieb
Re: Jetdirect 170x - Printerque
Hallo Zusammen,
ich würde auch gerne meinen Netzwerkdrucker (Samsung CLP 510N) bei eingehenden Druckaufträgen einschalten lassen. Das gnaze geht über meinen Server der so zu sagen als Prinserver läuft. Auf dem gleichen Server läuft auch die Homeputer Software.
Nur hab ich nicht ganz verstanden wie ihr das macht. Den Kommandozeilenbefehl "prnjobs" hab ich soweit verstanden das funktioniert auch. Nur bin ich noch nicht dahintergekommen wie ich das ganze jetzt die Homeputer Software übergeben soll.
Könntet ihr mir da vielleicht helfen??
Schon mal vielen vielen Dank im Voraus!!
Gruß
MiRank
ich würde auch gerne meinen Netzwerkdrucker (Samsung CLP 510N) bei eingehenden Druckaufträgen einschalten lassen. Das gnaze geht über meinen Server der so zu sagen als Prinserver läuft. Auf dem gleichen Server läuft auch die Homeputer Software.
Nur hab ich nicht ganz verstanden wie ihr das macht. Den Kommandozeilenbefehl "prnjobs" hab ich soweit verstanden das funktioniert auch. Nur bin ich noch nicht dahintergekommen wie ich das ganze jetzt die Homeputer Software übergeben soll.
Könntet ihr mir da vielleicht helfen??
Schon mal vielen vielen Dank im Voraus!!
Gruß
MiRank
-
- Beiträge: 239
- Registriert: 07.11.2007, 15:27
- System: Alternative CCU (auf Basis OCCU)
- Wohnort: Wien
- Hat sich bedankt: 1 Mal
Re: Jetdirect 170x - Printerque
Hallo,
ich habe jetzt meine ganzes IT Equipment (Computer, LCD Modul, ROuter, Modem, Printer, ...) übersiedeln müssen.
Jetzt war ich die letzte Zeit mit Arbeit ziemlich eingedeckt - @Buempi: leider auch noch nicht zum Testen gekommen
@MiRank:
Ich habe das Script ein wenig abgewandelt, jetzt gibt es genau die Anzahl der Printjobs für einen bestimmten Drucker aus. Diese hole ich mir mit popen(...,'r') ins php Skript und dann als Skriptoutput in ein Anzeigefeld. Das mache ich für jeden Drucker. In meiner Homeputer Steuerung gibt es für jeden Drucker ein Anzeigeobjekt (Zahl), in welches die Zahl geschreiben wird. Ist die Zahl >0 wird der Printer eingeschalten. Ist die Zahl 0 wird ein Timer gestartet, welcher solange läuft bis die Zahl wieder nicht 0 ist. Wenn der Timer nun >8min ist, wird der Printer ausgeschalten. Die 8 min habe ich einfach einmal so festgelegt. Damit verhindere ich, dass - wenn jemand etwas druckt - der Printer gleich wieder ausgeschalten wird, da ja mein Laserdrucker zum aufheizen einiges an Energie braucht.
Ich hoffe Dir geholfen zu haben.
lg
ich habe jetzt meine ganzes IT Equipment (Computer, LCD Modul, ROuter, Modem, Printer, ...) übersiedeln müssen.
Jetzt war ich die letzte Zeit mit Arbeit ziemlich eingedeckt - @Buempi: leider auch noch nicht zum Testen gekommen
@MiRank:
Ich habe das Script ein wenig abgewandelt, jetzt gibt es genau die Anzahl der Printjobs für einen bestimmten Drucker aus. Diese hole ich mir mit popen(...,'r') ins php Skript und dann als Skriptoutput in ein Anzeigefeld. Das mache ich für jeden Drucker. In meiner Homeputer Steuerung gibt es für jeden Drucker ein Anzeigeobjekt (Zahl), in welches die Zahl geschreiben wird. Ist die Zahl >0 wird der Printer eingeschalten. Ist die Zahl 0 wird ein Timer gestartet, welcher solange läuft bis die Zahl wieder nicht 0 ist. Wenn der Timer nun >8min ist, wird der Printer ausgeschalten. Die 8 min habe ich einfach einmal so festgelegt. Damit verhindere ich, dass - wenn jemand etwas druckt - der Printer gleich wieder ausgeschalten wird, da ja mein Laserdrucker zum aufheizen einiges an Energie braucht.
Ich hoffe Dir geholfen zu haben.
lg
---------------------------------------------
Auf mehrfachen Wunsch hier keine Inventur meiner Homematic mehr... Viele Komponenten in BEtrieb
Auf mehrfachen Wunsch hier keine Inventur meiner Homematic mehr... Viele Komponenten in BEtrieb
-
- Beiträge: 239
- Registriert: 07.11.2007, 15:27
- System: Alternative CCU (auf Basis OCCU)
- Wohnort: Wien
- Hat sich bedankt: 1 Mal
Re: Jetdirect 170x - Printerque
Hallo zusammen,
auf Grund mehrerer Anfragen hier meine Lösung für Drucker einschalten, wenn ein Printjob vorhanden ist:
1. Vorraussetzungen:
Homeputer Studio
php
Windows csript
Homeputer Server ist auch PrintServer für den gewünschten Drucker
2. Objekte
ich habe für meine Objekte eine eigene Nomiklatur, daher bitte nicht wundern, die ersten beiden Stellen sind immer der Raum in dem das Gerät steht
ABPRinter
FS20 Schalt-Steckdose
ABHPLJ6Jobs
Typ: Zeichen
Makro:
Das Objekt 'test' ist mein allgemeines Outputziel für alle php Scripts. Das Objekt ABHPLJ6Zeit ist auch vom Typ Zeichen und zeigt die Zeit ohne Printjob an.
jobs und startzeit sind Variablen im Objekt ABHPLJ6Jobs.
Die aufgerufene Sciptdatei ist im gegensatz zu der von Windows modifiziert. Es ist ein Parameter "-o" eingebaut worden. Mit diesem wird ausschließlich die Anzahl der Druckjobs ausgegeben. Hier die modifizierte prnjobs1.vbs
Makro im Objekt ABHPLJ6Zeit:
Nach 8 Minuten Leerlauf wird der Printer abgeschalten.
Falls noch etwas unklar ist bitte einfach fragen...
lg
auf Grund mehrerer Anfragen hier meine Lösung für Drucker einschalten, wenn ein Printjob vorhanden ist:
1. Vorraussetzungen:
Homeputer Studio
php
Windows csript
Homeputer Server ist auch PrintServer für den gewünschten Drucker
2. Objekte
ich habe für meine Objekte eine eigene Nomiklatur, daher bitte nicht wundern, die ersten beiden Stellen sind immer der Raum in dem das Gerät steht
ABPRinter
FS20 Schalt-Steckdose
ABHPLJ6Jobs
Typ: Zeichen
Makro:
Code: Alles auswählen
<?
$fp=popen("cscript //NoLogo e:\ELV\BAT\prnjobs1.vbs -l -o","r");
$z=fread($fp,2048);
echo trim($z);
pclose($fp);
?>
test:=Scriptoutput
ABHPLJ6Jobs:= Scriptoutput + " wartende Jobs"
jobs:=Scriptoutput
wenn jobs > 0 und ABprinter ausgeschaltet dann
ABPrinter einschalten
startzeit:=ZEIT
ENDEwenn
wenn jobs >0 und ABprinter eingeschaltet dann
startzeit:=ZEIT
ENDEwenn
ABHPLJ6Zeit:= stoppzeit(startzeit)
jobs und startzeit sind Variablen im Objekt ABHPLJ6Jobs.
Die aufgerufene Sciptdatei ist im gegensatz zu der von Windows modifiziert. Es ist ein Parameter "-o" eingebaut worden. Mit diesem wird ausschließlich die Anzahl der Druckjobs ausgegeben. Hier die modifizierte prnjobs1.vbs
Code: Alles auswählen
'----------------------------------------------------------------------
'
' Copyright (c) Microsoft Corporation. All rights reserved.
'
' Abstract:
' prnjobs.vbs - job control script for WMI on Whistler
' used to pause, resume, cancel and list jobs
'
' Usage:
' prnjobs [-zmxl?] [-s server] [-p printer] [-j jobid] [-u user name] [-w password]
'
' Examples:
' prnjobs -z -j jobid -p printer
' prnjobs -l -p printer
'
' Erweitert von Andreas Dolinar
' zusätzlicher Parameter -o
' dieser gibt nur die Anzahl der Printjobs für einen Drucker aus - nur sinnvoll wenn Option -l auch aktiv....
'
'----------------------------------------------------------------------
option explicit
' Debugging trace flags, to enable debug output trace message
' change gDebugFlag to true.
'
const kDebugTrace = 1
const kDebugError = 2
dim gDebugFlag
gDebugFlag = false
' Operation action values.
'
const kActionUnknown = 0
const kActionPause = 1
const kActionResume = 2
const kActionCancel = 3
const kActionList = 4
const kErrorSuccess = 0
const KErrorFailure = 1
const kNameSpace = "root\cimv2"
'
' Generic strings
'
const L_Empty_Text = ""
const L_Space_Text = " "
const L_Error_Text = "Fehler"
const L_Success_Text = "Erfolg"
const L_Failed_Text = "Fehlgeschlagen"
const L_Hex_Text = "0x"
const L_Printer_Text = "Drucker"
const L_Operation_Text = "Vorgang"
const L_Provider_Text = "Anbieter"
const L_Description_Text = "Beschreibung"
const L_Debug_Text = "Debug:"
'
' General usage messages
'
const L_Help_Help_General01_Text = "Syntax: prnjobs [-zmxl?] [-s Server][-p Drucker][-j Auftragskennung][-u Benutzername][-w Kennwort]"
const L_Help_Help_General02_Text = "Argumente:"
const L_Help_Help_General03_Text = "-j - Auftragskennung"
const L_Help_Help_General04_Text = "-l - Zeigt alle Aufträge an. zusaetzlich -o gibt nur die Anzahl der Printjobs aus"
const L_Help_Help_General05_Text = "-m - Setzt den Auftrag fort."
const L_Help_Help_General06_Text = "-p - Druckername"
const L_Help_Help_General07_Text = "-s - Servername"
const L_Help_Help_General08_Text = "-u - Benutzername"
const L_Help_Help_General09_Text = "-w - Kennwort"
const L_Help_Help_General10_Text = "-x - Bricht den Auftrag ab."
const L_Help_Help_General11_Text = "-z - Hält den Auftrag an."
const L_Help_Help_General12_Text = "-? - Zeigt die Befehlssyntax an."
const L_Help_Help_General13_Text = "Beispiele:"
const L_Help_Help_General14_Text = "prnjobs -z -p Drucker -j Auftragskennung"
const L_Help_Help_General15_Text = "prnjobs -l -p Drucker"
const L_Help_Help_General16_Text = "prnjobs -l"
'
' Messages to be displayed if the scripting host is not cscript
'
const L_Help_Help_Host01_Text = "Führen Sie dieses Skript mit CScript aus."
const L_Help_Help_Host02_Text = "Dies kann erreicht werden durch:"
const L_Help_Help_Host03_Text = "1. Unter der Verwendung von ""Script.vbs Argumente"" oder"
const L_Help_Help_Host04_Text = "2. durch Ändern des Standard-Windows Scripting Host in CScript,"
const L_Help_Help_Host05_Text = " indem ""CScript //H:CScript //S"" und das Script"
const L_Help_Help_Host06_Text = " ""script.vbs Argumente"" ausgeführt wird."
'
' General error messages
'
const L_Text_Error_General01_Text = "Der Scripting Host konnte nicht ermittelt werden."
const L_Text_Error_General02_Text = "Befehlszeile konnte nicht analysiert werden."
const L_Text_Error_General03_Text = "Win32-Fehlercode"
'
' Miscellaneous messages
'
const L_Text_Msg_General01_Text = "Druckaufträge können nicht aufgelistet werden."
const L_Text_Msg_General02_Text = "Anzahl der aufgelisteten Druckaufträge"
const L_Text_Msg_General03_Text = "Druckauftrag kann nicht festgelegt werden"
const L_Text_Msg_General04_Text = "Objekt ""SWbemLocator"" konnte nicht ermittelt werden."
const L_Text_Msg_General05_Text = "Verbindung mit dem WMI-Dienst konnte nicht hergestellt werden."
'
' Print job properties
'
const L_Text_Msg_Job01_Text = "Jobkennung"
const L_Text_Msg_Job02_Text = "Drucker"
const L_Text_Msg_Job03_Text = "Dokument"
const L_Text_Msg_Job04_Text = "Datentyp"
const L_Text_Msg_Job05_Text = "Treibername"
const L_Text_Msg_Job06_Text = "Beschreibung"
const L_Text_Msg_Job07_Text = "Verstrichene Zeit"
const L_Text_Msg_Job08_Text = "Computername"
const L_Text_Msg_Job09_Text = "Jobstatus"
const L_Text_Msg_Job10_Text = "Benachrichtigen"
const L_Text_Msg_Job11_Text = "Besitzer"
const L_Text_Msg_Job12_Text = "Gedruckte Seiten"
const L_Text_Msg_Job13_Text = "Parameter"
const L_Text_Msg_Job14_Text = "Größe"
const L_Text_Msg_Job15_Text = "Startzeit"
const L_Text_Msg_Job16_Text = "Endzeit"
const L_Text_Msg_Job17_Text = "Status"
const L_Text_Msg_Job18_Text = "Statusmaske"
const L_Text_Msg_Job19_Text = "Zeit der Auftragserteilung"
const L_Text_Msg_Job20_Text = "Seiten insgesamt"
'
' Action strings
'
const L_Text_Action_General01_Text = "Anhalten"
const L_Text_Action_General02_Text = "Fortsetzen"
const L_Text_Action_General03_Text = "Abbrechen"
'
' Debug messages
'
const L_Text_Dbg_Msg01_Text = "In function ListJobs"
const L_Text_Dbg_Msg02_Text = "In function ExecJob"
const L_Text_Dbg_Msg03_Text = "In function ParseCommandLine"
main
'
' Main execution starts here
'
sub main
dim iAction
dim iRetval
dim strServer
dim strPrinter
dim strJob
dim strUser
dim strPassword
dim strModus
'
' Abort if the host is not cscript
'
if not IsHostCscript() then
call wscript.echo(L_Help_Help_Host01_Text & vbCRLF & L_Help_Help_Host02_Text & vbCRLF & _
L_Help_Help_Host03_Text & vbCRLF & L_Help_Help_Host04_Text & vbCRLF & _
L_Help_Help_Host05_Text & vbCRLF & L_Help_Help_Host06_Text & vbCRLF)
wscript.quit
end if
iRetval = ParseCommandLine(iAction, strServer, strPrinter, strJob, strUser, strPassword, strModus)
if iRetval = kErrorSuccess then
select case iAction
case kActionPause
iRetval = ExecJob(strServer, strJob, strPrinter, strUser, strPassword, L_Text_Action_General01_Text)
case kActionResume
iRetval = ExecJob(strServer, strJob, strPrinter, strUser, strPassword, L_Text_Action_General02_Text)
case kActionCancel
iRetval = ExecJob(strServer, strJob, strPrinter, strUser, strPassword, L_Text_Action_General03_Text)
case kActionList
iRetval = ListJobs(strServer, strPrinter, strUser, strPassword, strModus)
case else
Usage(true)
exit sub
end select
end if
end sub
'
' Enumerate all print jobs on a printer
'
function ListJobs(strServer, strPrinter, strUser, strPassword, strModus)
on error resume next
DebugPrint kDebugTrace, L_Text_Dbg_Msg01_Text
dim Jobs
dim oJob
dim oService
dim iRetval
dim strTemp
dim iTotal
if WmiConnect(strServer, kNameSpace, strUser, strPassword, oService) then
set Jobs = oService.InstancesOf("Win32_PrintJob")
else
ListJobs = kErrorFailure
exit function
end if
if Err.Number <> kErrorSuccess then
wscript.echo L_Text_Msg_General01_Text & L_Space_Text & L_Error_Text & L_Space_Text _
& L_Hex_Text & hex(Err.Number) & L_Space_Text & Err.Description
ListJobs = kErrorFailure
exit function
end if
iTotal = 0
for each oJob in Jobs
'
' oJob.Name has the form "printer name, job id". We are isolating the printer name
'
strTemp = Mid(oJob.Name, 1, InStr(1, oJob.Name, ",", 1)-1 )
'
' If no printer was specified, then enumerate all jobs
'
if strPrinter = null or strPrinter = "" or LCase(strTemp) = LCase(strPrinter) then
iTotal = iTotal + 1
if strModus = "0" then
wscript.echo L_Empty_Text
wscript.echo L_Text_Msg_Job01_Text & L_Space_Text & oJob.JobId
wscript.echo L_Text_Msg_Job02_Text & L_Space_Text & strTemp
wscript.echo L_Text_Msg_Job03_Text & L_Space_Text & oJob.Document
wscript.echo L_Text_Msg_Job04_Text & L_Space_Text & oJob.DataType
wscript.echo L_Text_Msg_Job05_Text & L_Space_Text & oJob.DriverName
wscript.echo L_Text_Msg_Job06_Text & L_Space_Text & oJob.Description
wscript.echo L_Text_Msg_Job07_Text & L_Space_Text & Mid(CStr(oJob.ElapsedTime), 9, 2) & ":" & Mid(CStr(oJob.ElapsedTime), 11, 2) & ":" _
& Mid(CStr(oJob.ElapsedTime), 13, 2)
wscript.echo L_Text_Msg_Job08_Text & L_Space_Text & oJob.HostPrintQueue
wscript.echo L_Text_Msg_Job09_Text & L_Space_Text & oJob.JobStatus
wscript.echo L_Text_Msg_Job10_Text & L_Space_Text & oJob.Notify
wscript.echo L_Text_Msg_Job11_Text & L_Space_Text & oJob.Owner
wscript.echo L_Text_Msg_Job12_Text & L_Space_Text & oJob.PagesPrinted
wscript.echo L_Text_Msg_Job13_Text & L_Space_Text & oJob.Parameters
wscript.echo L_Text_Msg_Job14_Text & L_Space_Text & oJob.Size
if CStr(oJob.StartTime) <> "********000000.000000+000" and CStr(oJob.UntilTime) <> "********000000.000000+000" then
wscript.echo L_Text_Msg_Job15_Text & L_Space_Text & Mid(Mid(CStr(oJob.StartTime), 9, 4), 1, 2) & "h" & Mid(Mid(CStr(oJob.StartTime), 9, 4), 3, 2)
wscript.echo L_Text_Msg_Job16_Text & L_Space_Text & Mid(Mid(CStr(oJob.UntilTime), 9, 4), 1, 2) & "h" & Mid(Mid(CStr(oJob.UntilTime), 9, 4), 3, 2)
end if
wscript.echo L_Text_Msg_Job17_Text & L_Space_Text & oJob.Status
wscript.echo L_Text_Msg_Job18_Text & L_Space_Text & oJob.StatusMask
wscript.echo L_Text_Msg_Job19_Text & L_Space_Text & Mid(CStr(oJob.TimeSubmitted), 5, 2) & "/" _
& Mid(CStr(oJob.TimeSubmitted), 7, 2) & "/" _
& Mid(CStr(oJob.TimeSubmitted), 1, 4) & " " _
& Mid(CStr(oJob.TimeSubmitted), 9, 2) & ":" _
& Mid(CStr(oJob.TimeSubmitted), 11, 2) & ":" _
& Mid(CStr(oJob.TimeSubmitted), 13, 2)
wscript.echo L_Text_Msg_Job20_Text & L_Space_Text & oJob.TotalPages
end if
Err.Clear
end if
next
if strModus = "0" then
wscript.echo L_Empty_Text
wscript.echo L_Text_Msg_General02_Text & L_Space_Text & iTotal
else
wscript.echo iTotal
end if
ListJobs = kErrorSuccess
end function
'
' Pause/Resume/Cancel jobs
'
function ExecJob(strServer, strJob, strPrinter, strUser, strPassword, strCommand)
on error resume next
DebugPrint kDebugTrace, L_Text_Dbg_Msg02_Text
dim oJob
dim oService
dim iRetval
dim uResult
dim strName
'
' Build up the key. The key for print jobs is "printer-name, job-id"
'
strName = strPrinter & ", " & strJob
iRetval = kErrorFailure
if WmiConnect(strServer, kNameSpace, strUser, strPassword, oService) then
set oJob = oService.Get("Win32_PrintJob.Name='" & strName & "'")
else
ExecJob = kErrorFailure
exit function
end if
'
' Check if getting job instance succeeded
'
if Err.Number = kErrorSuccess then
uResult = kErrorSuccess
select case strCommand
case L_Text_Action_General01_Text
uResult = oJob.Pause()
case L_Text_Action_General02_Text
uResult = oJob.Resume()
case L_Text_Action_General03_Text
oJob.Delete_()
case else
Usage(true)
end select
if Err.Number = kErrorSuccess then
if uResult = kErrorSuccess then
wscript.echo L_Success_Text & L_Space_Text & strCommand & L_Space_Text _
& L_Text_Msg_Job01_Text & L_Space_Text & strJob _
& L_Space_Text & L_Printer_Text & L_Space_Text & strPrinter
iRetval = kErrorSuccess
else
wscript.echo L_Failed_Text & L_Space_Text & strCommand & L_Space_Text _
& L_Text_Error_General03_Text & L_Space_Text & uResult
end if
else
wscript.echo L_Text_Msg_General03_Text & L_Space_Text & L_Error_Text & L_Space_Text _
& L_Hex_Text & hex(Err.Number) & L_Space_Text & Err.Description
'
' Try getting extended error information
'
call LastError()
end if
else
wscript.echo L_Text_Msg_General03_Text & L_Space_Text & L_Error_Text & L_Space_Text _
& L_Hex_Text & hex(Err.Number) & L_Space_Text & Err.Description
'
' Try getting extended error information
'
call LastError()
end if
ExecJob = iRetval
end function
'
' Debug display helper function
'
sub DebugPrint(uFlags, strString)
if gDebugFlag = true then
if uFlags = kDebugTrace then
wscript.echo L_Debug_Text & L_Space_Text & strString
end if
if uFlags = kDebugError then
if Err <> 0 then
wscript.echo L_Debug_Text & L_Space_Text & strString & L_Space_Text _
& L_Error_Text & L_Space_Text & L_Hex_Text & hex(Err.Number) _
& L_Space_Text & Err.Description
end if
end if
end if
end sub
'
' Parse the command line into its components
'
function ParseCommandLine(iAction, strServer, strPrinter, strJob, strUser, strPassword, strModus)
on error resume next
DebugPrint kDebugTrace, L_Text_Dbg_Msg03_Text
dim oArgs
dim iIndex
iAction = kActionUnknown
iIndex = 0
strModus = "0"
set oArgs = wscript.Arguments
while iIndex < oArgs.Count
select case oArgs(iIndex)
case "-z"
iAction = kActionPause
case "-m"
iAction = kActionResume
case "-x"
iAction = kActionCancel
case "-l"
iAction = kActionList
case "-p"
iIndex = iIndex + 1
strPrinter = oArgs(iIndex)
case "-s"
iIndex = iIndex + 1
strServer = RemoveBackslashes(oArgs(iIndex))
case "-j"
iIndex = iIndex + 1
strJob = oArgs(iIndex)
case "-u"
iIndex = iIndex + 1
strUser = oArgs(iIndex)
case "-w"
iIndex = iIndex + 1
strPassword = oArgs(iIndex)
case "-o"
iIndex = iIndex + 1
strModus = "1"
case "-?"
Usage(true)
exit function
case else
Usage(true)
exit function
end select
iIndex = iIndex + 1
wend
if Err.Number = kErrorSuccess then
ParseCommandLine = kErrorSuccess
else
wscript.echo L_Text_Error_General02_Text & L_Space_Text & L_Error_Text & L_Space_Text _
& L_Hex_Text & hex(Err.Number) & L_Space_text & Err.Description
ParseCommandLine = kErrorFailure
end if
end function
'
' Display command usage.
'
sub Usage(bExit)
wscript.echo L_Help_Help_General01_Text
wscript.echo L_Empty_Text
wscript.echo L_Help_Help_General02_Text
wscript.echo L_Help_Help_General03_Text
wscript.echo L_Help_Help_General04_Text
wscript.echo L_Help_Help_General05_Text
wscript.echo L_Help_Help_General06_Text
wscript.echo L_Help_Help_General07_Text
wscript.echo L_Help_Help_General08_Text
wscript.echo L_Help_Help_General09_Text
wscript.echo L_Help_Help_General10_Text
wscript.echo L_Help_Help_General11_Text
wscript.echo L_Help_Help_General12_Text
wscript.echo L_Empty_Text
wscript.echo L_Help_Help_General13_Text
wscript.echo L_Help_Help_General14_Text
wscript.echo L_Help_Help_General15_Text
wscript.echo L_Help_Help_General16_Text
if bExit then
wscript.quit(1)
end if
end sub
'
' Determines which program is being used to run this script.
' Returns true if the script host is cscript.exe
'
function IsHostCscript()
on error resume next
dim strFullName
dim strCommand
dim i, j
dim bReturn
bReturn = false
strFullName = WScript.FullName
i = InStr(1, strFullName, ".exe", 1)
if i <> 0 then
j = InStrRev(strFullName, "\", i, 1)
if j <> 0 then
strCommand = Mid(strFullName, j+1, i-j-1)
if LCase(strCommand) = "cscript" then
bReturn = true
end if
end if
end if
if Err <> 0 then
wscript.echo L_Text_Error_General01_Text & L_Space_Text & L_Error_Text & L_Space_Text _
& L_Hex_Text & hex(Err.Number) & L_Space_Text & Err.Description
end if
IsHostCscript = bReturn
end function
'
' Retrieves extended information about the last error that occured
' during a WBEM operation. The methods that set an SWbemLastError
' object are GetObject, PutInstance, DeleteInstance
'
sub LastError()
on error resume next
dim oError
set oError = CreateObject("WbemScripting.SWbemLastError")
if Err = kErrorSuccess then
wscript.echo L_Operation_Text & L_Space_Text & oError.Operation
wscript.echo L_Provider_Text & L_Space_Text & oError.ProviderName
wscript.echo L_Description_Text & L_Space_Text & oError.Description
wscript.echo L_Text_Error_General03_Text & L_Space_Text & oError.StatusCode
end if
end sub
'
' Connects to the WMI service on a server. oService is returned as a service
' object (SWbemServices)
'
function WmiConnect(strServer, strNameSpace, strUser, strPassword, oService)
on error resume next
dim oLocator
dim bResult
oService = null
bResult = false
set oLocator = CreateObject("WbemScripting.SWbemLocator")
if Err = kErrorSuccess then
set oService = oLocator.ConnectServer(strServer, strNameSpace, strUser, strPassword)
if Err = kErrorSuccess then
bResult = true
oService.Security_.impersonationlevel = 3
'
' Required to perform administrative tasks on the spooler service
'
oService.Security_.Privileges.AddAsString "SeLoadDriverPrivilege"
Err.Clear
else
wscript.echo L_Text_Msg_General05_Text & L_Space_Text & L_Error_Text _
& L_Space_Text & L_Hex_Text & hex(Err.Number) & L_Space_Text _
& Err.Description
end if
else
wscript.echo L_Text_Msg_General04_Text & L_Space_Text & L_Error_Text _
& L_Space_Text & L_Hex_Text & hex(Err.Number) & L_Space_Text _
& Err.Description
end if
WmiConnect = bResult
end function
'
' Remove leading "\\" from server name
'
function RemoveBackslashes(strServer)
dim strRet
strRet = strServer
if Left(strServer, 2) = "\\" and Len(strServer) > 2 then
strRet = Mid(strServer, 3)
end if
RemoveBackslashes = strRet
end function
Code: Alles auswählen
wenn stoppzeit(ABHPLJ6Jobs.startzeit) > "00:08:00" und ABPrinter eingeschaltet dann
ABPrinter ausschalten
endewenn
Falls noch etwas unklar ist bitte einfach fragen...
lg
---------------------------------------------
Auf mehrfachen Wunsch hier keine Inventur meiner Homematic mehr... Viele Komponenten in BEtrieb
Auf mehrfachen Wunsch hier keine Inventur meiner Homematic mehr... Viele Komponenten in BEtrieb