Hallo Forum.
Ich arbeite gerade als Anfänger an einem Skript, das ein Verzeichnis auf Dateieingang prüft, die Datei druckt, dann wird noch eine Kontroll EMail verschickt, und die Datei wird anschließend in ein Archiv verschoben.
Nicht lachen, ich hab mir alles zusammengeklaubt was ich finden konnte.
Unabhängig vom Skript, ob der soooo Sinn macht oder verbessert werden könnte
(PS: Läuft auf einem Win2003 Server. Und mit API Funktionen funktioniert nicht alles)...
und ich weiß, ich hab da noch Fehler drin (z.B. das Datum der Logdatei aktualisiert sich nicht), ...
bin ich zu unerfahren um mein Problem selbst zu lösen.
Try und Error funktioniert halt nicht immer und Onkel Google weiß ich nicht was ich fragen soll
Das Problem liegt darin, dass das Script im Hintergrund, bei Nicht-Anmeldung am Server zwar arbeitet, aber nicht druckt. Also seinen Hauptzweck nicht erfüllt.
Log wird geschrieben (ich hab es etwas ausführlicher gemacht, um rauszufinden woran das liegen könnte), EMail wird versendet und die Datei verschoben,
ABER es kommt nichts aus dem Drucker raus. Der Job wird nicht übergeben.
Melde ich mich an, z.B. über RDP, funktioniert der Script so wie er jetzt ist (natürlich mit den beschriebenen Fehlern im zweiten Absatz) korrekt.
Auf dem Drucker hat Jeder das Recht zu drucken.
Das PDF Programm funktioniert ja auch so in der Form. An den Parametern liegt es nicht.
>> Hat jemand einen Tipp oder ein Stichwort zum googlen?
Der Wurm kann nach meinem Verständnis nur in Zeile 100 liegen. Der Programmaufruf vom PDF Programm klappt nach der Abmeldung vielleicht nicht mehr.
Mit anderen PDF Programmen habe ich getestet. Die zerhauen mir aber die Formate oder drucken nicht im Hintergrund. Und schließen tun sie sich auch nicht automatisch und der Script läuft nicht weiter.
;#NoTrayIcon
#RequireAdmin
; Hier kannst du einen Hotkey zum Beenden des Programms festlegen
; in Anführungszeichen vorm Komma, z. Z. ALT+SHIFT+Q
HotKeySet("+!q", "Quit")
;Anpassungen
$status = DriveStatus( "G:" )
If $status = "INVALID" Then
DriveMapAdd("G:", "\\IPAdresse\Gruppen", 0,"adminuser@domain","passwort")
EndIf
;Pfad zu PDF Viewer
$program = "C:\Programme\SumatraPDF"
$date = StringFormat("%02d",@MDAY) & "_" & @MON & "_" & @YEAR
$logfile="G:\Temp\_" & $date & "_" & "Verarbeitung.txt"
$pathtosetdefaultprinter = "c:\AutoIt\Program"
$standardprinter = "P040"
$P1 = "P153"
; Pfad der auf neue Dateien überwacht werden soll (Freigabename)
; Recht muss vorhanden sein
$source = "G:\LSScan\"
$sP1 = $source
; Pfad, in den die Dateien nach dem Drucken verschoben werden sollen
$dest = "G:\_Archiv\"
; Pruefintervall des Scripts nach vollstaendigem Abschluss in Millisekunden (10 Sek = 10000)
$interval = 20000
;-----Script Start-------------------------------------
While 1
Sleep($interval)
; Druckverzeichnisse für jeden Drucker erstellen, damit der User dort die Dateien
; ablegen kann. Falls das Verzeichnis aus versehen gelöscht wird,
; wird es durch die Schleife neu erstellt
DirCreate($source)
DirCreate($sP1)
; Durchsuchen der Verzeichnisse nach PDF Dateien
$file1 = FileFindFirstFile ($sP1 & "\*.pdf")
If $file1 <> -1 then Print1()
FileClose($file1)
WEnd
;-------------------------------------------------------
Func Print1()
;Standarddrucker umsetzen
RunWait($pathtosetdefaultprinter & "\SetDefaultPrinter.exe " & $P1, "", @SW_HIDE)
While 1
;PDF Datei existiert im Verzeichnis, Vorgang startet
$pdffile = FileFindNextFile($file1)
If @error then ExitLoop
FileWriteLine($logfile, "--------------------")
FileWriteLine($logfile,$date)
FileWriteLine($logfile,@HOUR &":"&@MIN &":"& @sec)
FileWriteLine($logfile, " ")
FileWriteLine($logfile, $pdffile & " gefunden")
;Warten bis Datei vollstaendig gespeichert ist
$sltime1=10000
FileWriteLine($logfile, " Warten auf Speicherung damit Druck starten kann...Sleeptime " & $sltime1 & "ms")
Sleep($sltime1)
;Druck der PDF
FileWriteLine($logfile, $pdffile & " " & "an Drucker " & $P1 & " " & "uebergeben")
FileWriteLine($logfile,@HOUR &":"&@MIN &":"& @sec)
RunWait('"' & $program & '\SumatraPDF.exe" -print-to '& $P1 &' -silent -exit-when-done "' & $sP1 & '\' & $pdffile & '"')
FileWriteLine($logfile, $pdffile & " " & "an Drucker gedruckt")
FileWriteLine($logfile,@HOUR &":"&@MIN &":"& @sec)
;Warten bis gedruckt wurde und EMail (PDF) verschicken
$sltime2=20000
FileWriteLine($logfile, " Warten bis gedruckt wurde...danach EMail starten...Sleeptime " & $sltime2 & "ms")
Sleep($sltime2)
Run("c:\Batch\RW_LS.bat")
FileWriteLine($logfile, $pdffile & " " & "per EMail geschickt")
FileWriteLine($logfile,@HOUR &":"&@MIN &":"& @sec)
;Warten bis Versand fertig (Datei gesperrt) und Datei verschieben
$sltime3=10000
FileWriteLine($logfile, " Warten bis EMail vollstaendig verschickt...Sleeptime " & $sltime3 & "ms")
Sleep($sltime3)
FileMove($source & '\' & $pdffile , $dest, 1)
FileWriteLine($logfile, $pdffile & " " & "in Archiv verschoben")
FileWriteLine($logfile,@HOUR &":"&@MIN &":"& @sec)
FileWriteLine($logfile," Ende...Alle gefundenen PDF verarbeitet")
FileWriteLine($logfile," Pruefungsintervall alle " & $interval & "ms")
WEnd
;Standarddrucker wieder umsetzen
RunWait($pathtosetdefaultprinter & "\SetDefaultPrinter.exe " & $standardprinter, "", @SW_HIDE)
EndFunc
;-------------------------------------------------------
Func Quit()
Exit
Alles anzeigen