Powershell PDF Drucken über Scheduler Task
Hallo zusammen,
ich bin hier gerade am verzweifeln...
Ich habe in Powershell Skript, welchen mir eine PDF drucken soll. Diesen Powershell skript wird aus einer .bat Datei aufgerufen.
Wenn ich das manuell aufrufe dann funktioniert es wunderbar, wenn ich einen Scheduler Task draus mache dann wird das Skript auch aufgerufen, aber es wird nicht gedruckt.
Wenn ich die Prozesse vom Server beobachte, dann wird der Adobe Reader Prozess auch ganz kurz gestartet, beendet sich aber auch gleich wieder. Aber ich habe in meinem Skript ein sleep 30 eingebaut bevor der Prozess wieder beendet wird.
Vielen Vielen Dank für eure Hilfe.
Hier das Skript
ich bin hier gerade am verzweifeln...
Ich habe in Powershell Skript, welchen mir eine PDF drucken soll. Diesen Powershell skript wird aus einer .bat Datei aufgerufen.
Wenn ich das manuell aufrufe dann funktioniert es wunderbar, wenn ich einen Scheduler Task draus mache dann wird das Skript auch aufgerufen, aber es wird nicht gedruckt.
Wenn ich die Prozesse vom Server beobachte, dann wird der Adobe Reader Prozess auch ganz kurz gestartet, beendet sich aber auch gleich wieder. Aber ich habe in meinem Skript ein sleep 30 eingebaut bevor der Prozess wieder beendet wird.
Vielen Vielen Dank für eure Hilfe.
Hier das Skript
Param(
[String] $printInfos
)
$printInfos = "124*Laser*C:\Druckjob\test.pdf*TestDrucker#"
#"123456789*REC*C:\Druckjob\test.pdf*testDrucker#123456789*VSL*C:\Druckjob\zm400output200dpi.prn*testDrucker2#123456789*VSL*C:\Druckjob\zm400output200dpi.prn*testDrucker2";
[String] $delimiter1 = "#";
[String] $delimiter2 = "*";
#Erstmal die einzelnen Dateien aus dem Übergabe String splitten
#Durch den .Splitt wird automatisch ein Array erzeugt
$splittString = $printInfos.Split($delimiter1);
#Über dieses Array kann ich dann loopen
for($i=0; $i -lt $splittString.Length; $i++){
#Splitte nochmal die einzelnen Properties für einen Dateidruck auf
$splittDateiProbs = $splittString[$i].Split($delimiter2);
#Dole mir aus dem Array splittDateiProbs die wichtigsten sachen raus
$dateityp = $splittDateiProbs[1]
$dateiZumDrucken = $splittDateiProbs[2];
$druckerName = $splittDateiProbs[3];
#Je nach Dateityp den eigenen Druckvorgang auslösen
switch($Dateityp){
#Rechnungen sind im Format PDF und werden auf dem Laser Drucker gedruckt
#Hier geht der Weg über den AdobeReader.
#Mit Start-Process wird das Dokument mit dem Adobe Reader geöffnet und mit printto an den Drucker übergeben
#Das Problem ist das sich dadurch der Adobe Reader nicht mehr schliesst. Deshalb muss er manuell geschlossen werden nachjedem druck
"Laser" {
#Hier wird der Prozess gestartet und sich die app gemerkt mit der der Druck gestartet wurde
$pdfApp = (start-job $DateiZumDrucken -Verb "printto" -PassThru -ArgumentList $druckerName).ProcessName
#Um den Prozess zu beenden muss sich die ID des Druck prozessen gemerkt werden um diesen später zu killen
$prozess = Get-Process $pdfApp
#Dann eine Zeit warten bis gedruckt wird, den Wert kann man beliebig ändern
sleep 30
#Zu guter letzt den Prozess beenden
get-process -id $prozess.id -ErrorAction SilentlyContinue | Stop-Process
}
"VSL" {
#Wenn ein Etikett gedruckt werden muss wird die Datei 1zu1 an den Drucker geschickt
#Weil es sich hierbei um ein Binär dokument handelt und es keine Dateizuordung gibt die der start-Prozess braucht
#Was hier aber das gute ist, der Etiketten drucker weis gleich was er mit der Datei anfangen muss
#Allerdings braucht der Copy eine Freigabe auf dem Rechner und die wird dann angesteuert
$druckerFreigabe = "\\"+$env:computername+"\"+$druckerName;
copy $DateiZumDrucken $druckerFreigabe;
}
}
}
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 299483
Url: https://administrator.de/forum/powershell-pdf-drucken-ueber-scheduler-task-299483.html
Ausgedruckt am: 20.04.2025 um 15:04 Uhr
4 Kommentare
Neuester Kommentar

Moin,
ich denke das es mal wieder eins der typischen Probleme ist. Drucker wurde nur für den aktuellen User gemappt und durch Ausführen des Tasks mit anderem Account deshalb im geplanten Task nicht verfügbar. Zusätzlich sollte man Bedenken das Netzlaufwerke ebenfalls nur in der jeweiligen Usersession verfügbar sind, hier sollte man also mit UNC-Pfaden arbeiten.
Das alles kannst du ganz leicht überprüfen indem du entsprechendes Logging in dein PS-Skript einbaut was die die verfügbaren Drucker und Testweise den Zugriff auf eventuell verwendete Zielshares/Datengräber auflistet.
Gruß jodel32
ich denke das es mal wieder eins der typischen Probleme ist. Drucker wurde nur für den aktuellen User gemappt und durch Ausführen des Tasks mit anderem Account deshalb im geplanten Task nicht verfügbar. Zusätzlich sollte man Bedenken das Netzlaufwerke ebenfalls nur in der jeweiligen Usersession verfügbar sind, hier sollte man also mit UNC-Pfaden arbeiten.
Das alles kannst du ganz leicht überprüfen indem du entsprechendes Logging in dein PS-Skript einbaut was die die verfügbaren Drucker und Testweise den Zugriff auf eventuell verwendete Zielshares/Datengräber auflistet.
Gruß jodel32

Nun, ganz einfach den Drucker in dem Account mit dem der Task ausgeführt wird einmal verbinden, dann steht er auch in dieser Session zur Verfügung. Netzwerkdrucker-Mappings sind Userabhängig gemappt.