PowerShell: kein Programmaufruf in Aufgabenplanung
Hallo,
ich habe ein PowerShell Script, welches mir aus einer .csv Datei und einer DB Abfrage TIF Dateien in eine .pdf Dateien umwandelt (Druckt mit Hilfe des Programmes PDFCreator).
Wenn man das Script in der PowerShell selbst ausführt, werden mir die PDF Dateien erstellt - folglich ist das Script an sich korrekt. Nun soll das Script in der Aufgabenplanung automatisiert ausgeführt werden - und das geht leider nicht. Es scheint als würde er beim Aufruf vom PDFCreator hängen bleiben.
Bei dem Referenzticket PowerShell-Script wird per Aufgabenplanung nicht ausgeführt wurde ich leider auch nicht schlauer.
Im Start-Transcript C:\temp\log.txt steht bei manueller Ausführung:
Bei der Ausführung via Aufgabenplanung:
Und das eigene Protokoll bei manueller Ausführung:
... und bei der Ausführung über die Aufgabenplanung:
Nun scheint es, als würde PowerShell das Programm PDFCreator in der Aufgabenplanung nicht aufrufen, aber bei manueller Ausführung.
Der Teilcode der PowerShell sieht wie folgt aus:
Hat jemand eine Idee? Oder weiß jemand, ob man beim Aufruf einer .exe in der PowerShell etwas beachten muss? Die Get-ExecutionPolicy ist auf Unrestricted gesetzt - war zuvor auf.
Grüße und danke schon mal vorab
lupo
ich habe ein PowerShell Script, welches mir aus einer .csv Datei und einer DB Abfrage TIF Dateien in eine .pdf Dateien umwandelt (Druckt mit Hilfe des Programmes PDFCreator).
Wenn man das Script in der PowerShell selbst ausführt, werden mir die PDF Dateien erstellt - folglich ist das Script an sich korrekt. Nun soll das Script in der Aufgabenplanung automatisiert ausgeführt werden - und das geht leider nicht. Es scheint als würde er beim Aufruf vom PDFCreator hängen bleiben.
Bei dem Referenzticket PowerShell-Script wird per Aufgabenplanung nicht ausgeführt wurde ich leider auch nicht schlauer.
Im Start-Transcript C:\temp\log.txt steht bei manueller Ausführung:
**********************
Start der Windows PowerShell-Aufzeichnung
Startzeit: 20190701113130
Benutzername: FIRMA\Administrator
Als Benutzer ausführen: FIRMA\Administrator
Computer: FIRMA-TOF (Microsoft Windows NT 6.2.9200.0)
Hostanwendung: C:\Windows\System32\WindowsPowerShell\v1.0\powershell_ise.exe D:\ABL_TOF_Script\Abliefernachweis_FIRMA_TOF.ps1
Prozess-ID: 1244
**********************
Verzeichnis: C:\Scripts
Verzeichnis: C:\Scripts
Verzeichnis: C:\Scripts
Verzeichnis: C:\Scripts
Mode LastWriteTime Length Name
Mode LastWriteTime Length Name
Mode LastWriteTime Length Name
Mode LastWriteTime Length Name
---- ------------- ------ ----
---- ------------- ------ ----
---- ------------- ------ ----
---- ------------- ------ ----
-a--- 01.07.2019 11:31 0 TOF-PDF-FIRMA-Erstellung_19-07-01-11-31.txt
-a--- 01.07.2019 11:31 0 TOF-PDF-FIRMA-Erstellung_19-07-01-11-31.txt
-a--- 01.07.2019 11:31 0 TOF-PDF-FIRMA-Erstellung_19-07-01-11-31.txt
-a--- 01.07.2019 11:31 0 TOF-PDF-FIRMA-Erstellung_19-07-01-11-31.txt
PS C:\Program Files\PDFCreator> TerminatingError(): "Die Pipeline wurde beendet."
>> TerminatingError(): "Die Pipeline wurde beendet."
PS C:\Program Files\PDFCreator> TerminatingError(): "Die Pipeline wurde beendet."
>> TerminatingError(): "Die Pipeline wurde beendet."
PS C:\Program Files\PDFCreator> TerminatingError(): "Die Pipeline wurde beendet."
>> TerminatingError(): "Die Pipeline wurde beendet."
PS C:\Program Files\PDFCreator> TerminatingError(): "Die Pipeline wurde beendet."
>> TerminatingError(): "Die Pipeline wurde beendet."
PS C:\Program Files\PDFCreator> Stop-Transcript
PS C:\Program Files\PDFCreator> Stop-Transcript
PS C:\Program Files\PDFCreator> Stop-Transcript
PS C:\Program Files\PDFCreator> Stop-Transcript
**********************
Ende der Windows PowerShell-Aufzeichnung
Endzeit: 20190701113157
**********************
Die Aufzeichnung wurde beendet. Die Ausgabedatei ist "C:\temp\log.txt".
Die Aufzeichnung wurde beendet. Die Ausgabedatei ist "C:\temp\log.txt".
Die Aufzeichnung wurde beendet. Die Ausgabedatei ist "C:\temp\log.txt".
Bei der Ausführung via Aufgabenplanung:
**********************
Start der Windows PowerShell-Aufzeichnung
Startzeit: 20190701112724
Benutzername: DOMAIN\Administrator
Als Benutzer ausführen: DOMAIN\Administrator
Computer: EIKA-TOF (Microsoft Windows NT 6.3.9600.0)
Hostanwendung: C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -command D:\ABL_TOF_Script\Abliefernachweis.ps1
Prozess-ID: 3212
**********************
Die Aufzeichnung wurde gestartet. Die Ausgabedatei ist "C:\temp\log.txt".
Verzeichnis: C:\Scripts
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 01.07.2019 11:27 0 TOF-PDF-FIRMA-Erstellung_19-07-01-11-27.txt
PS C:\Program Files\PDFCreator> Stop-Transcript
PS C:\Program Files\PDFCreator> Stop-Transcript
PS C:\Program Files\PDFCreator> Stop-Transcript
PS C:\Program Files\PDFCreator> Stop-Transcript
**********************
Ende der Windows PowerShell-Aufzeichnung
Endzeit: 20190701112844
**********************
Die Aufzeichnung wurde beendet. Die Ausgabedatei ist "C:\temp\log.txt".
Die Aufzeichnung wurde beendet. Die Ausgabedatei ist "C:\temp\log.txt".
Die Aufzeichnung wurde beendet. Die Ausgabedatei ist "C:\temp\log.txt".
Und das eigene Protokoll bei manueller Ausführung:
... bla bla bal importiert und verarbeitet
11-31-31 000000098733203.TIF in Tabelle Tracking_FIRMA123 vorhanden, Kunde: KNR1, LSNR: 21009132
11-31-31 PDFCreator gestartet
11-31-31 warten beendet
11-31-31 warten beendet
11-31-31 warten beendet
11-31-31 warten beendet
11-31-31 Programm Durchgelaufen
11-31-39 000000098733204.TIF wird verarbeitet
11-31-39 000000098733204.TIF in Tabelle Tracking_FIRMA123 vorhanden, Kunde: KNR2, LSNR: 21009454
11-31-39 PDFCreator gestartet
11-31-39 warten beendet
11-31-39 warten beendet
11-31-39 warten beendet
11-31-39 warten beendet
11-31-39 Programm Durchgelaufen
11-31-47 000000098733205.TIF wird verarbeitet
11-31-47 000000098733205.TIF in Tabelle Tracking_FIRMA123 vorhanden, Kunde: KNR3, LSNR: 21009364
11-31-47 PDFCreator gestartet
11-31-47 warten beendet
... und bei der Ausführung über die Aufgabenplanung:
... bla bla bal importiert und verarbeitet
11-27-26 000000098733203.TIF in Tabelle Tracking_FIRMA123 vorhanden, Kunde: KNR1, LSNR: 21009132
11-27-26 PDFCreator gestartet
11-27-26 warten beendet
11-27-26 warten beendet
11-27-26 warten beendet
11-27-26 warten beendet
11-27-26 warten beendet
11-27-26 warten beendet
11-27-26 warten beendet
11-27-26 warten beendet
11-27-26 warten beendet
11-27-26 warten beendet
11-27-26 warten beendet
11-27-26 warten beendet
11-27-26 warten beendet
11-27-26 warten beendet
11-27-26 warten beendet
11-27-26 warten beendet
11-27-26 warten beendet
11-27-26 warten beendet
11-27-26 warten beendet
Nun scheint es, als würde PowerShell das Programm PDFCreator in der Aufgabenplanung nicht aufrufen, aber bei manueller Ausführung.
Der Teilcode der PowerShell sieht wie folgt aus:
cd "C:\Program Files\PDFCreator"
foreach ($File in $Files){
#Variablen für Filename mit und ohne Dateiendung festlegen
$filename=$File.BaseName
$filenamemitendung=$File.Name
# Wenn die Datei existiert, wird sie verarbeitet
if($File){
$LOGtext = Get-Date -Format hh-mm-ss
"$LOGtext $File wird verarbeitet" | out-File -FilePath $logpath -append
# Prüfen ob es zur Trackingnummer ein Auftrag gibt
$SqlQuery = "select top 1 isnull(cast(rtrim(rk_kunr) as char(6)),'') as ku_nr, RK_NlFIMRANr as Nl_Nr, Lieferant1.ls_nr from Lieferant1 join rechnungskopf on Lieferant1.ls_nr = rechnungskopf.RK_LieferscheinNr where trackingid = '$filenamemitendung' and RK_NlFIMRANr = '1337' order by rk_rechnungsdatum desc;" # Query
$cmd.CommandText = $SqlQuery
$cmd.Connection = $dbconn;
$SqlAdapter.SelectCommand = $cmd
$DataSet.Clear()
if($SqlAdapter.Fill($DataSet) = 1) {
"$LOGtext $File in Tabelle Lieferant1 vorhanden, Kunde: $Ku_Nr, LSNR: $Ls_Nr"| Out-File -FilePath $logpath -append
$Ku_Nr=$DataSet.Tables.Rows
$Nl_Nr=$DataSet.Tables.Rows[1]
$Ls_Nr=$DataSet.Tables.Rows[2]
$newname = 'Liefernachweis_'+$Nl_Nr+'_'+$Ku_Nr+'_AU'+$Ls_Nr
# prüfen, ob Kundennummer 6-stellig, falls ja, beginne mit der pdf-Erstellung
if ($Ku_Nr.Length -eq 6 ) {
# prüfen, ob Datei noch nicht existiert
if(!(Test-Path "D:\_PDF\$newname.pdf")){
.\\PDFCreator.exe /printfile="D:\1337\2PDF\$filenamemitendung" /Outputfile="D:\_PDF\$newname.pdf" /nostart
"$LOGtext PDFCreator gestartet" | Out-File -FilePath $logpath -append
$timer = 0
while(!(Test-Path "D:\_PDF\$newname.pdf")){
Start-Sleep -s 1
$timer+=1
if($timer -gt 60){
"$LOGtext $newname nicht geschrieben" | Out-File -FilePath $logpath -append
#get-Process -Name "PDFCreator" | foreach{Stop-Process}
If((Get-Process -Name "PDFCreator").count -gt 0) {
Get-Process -Name "PDFCreator" | where {$_.responding -like "False"} | stop-process -ErrorAction SilentlyContinue }
#get-Process -Name ErrorReport | Stop-Process
# break
}
start-sleep -s 1
"$LOGtext warten beendet" | Out-File -FilePath $logpath -append}
"$LOGtext Programm Durchgelaufen" | Out-File -FilePath $logpath -append
}}}}}
Hat jemand eine Idee? Oder weiß jemand, ob man beim Aufruf einer .exe in der PowerShell etwas beachten muss? Die Get-ExecutionPolicy ist auf Unrestricted gesetzt - war zuvor auf.
Grüße und danke schon mal vorab
lupo
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 467956
Url: https://administrator.de/contentid/467956
Ausgedruckt am: 22.11.2024 um 04:11 Uhr
8 Kommentare
Neuester Kommentar
Moin,
warum eigentlich mit dem PDFCreator rbeiten?
Wäre ein Tool zum convertieren nicht effizienter?
z.B. http://www.simplesystems.org/libtiff/
Ansonsten tippe ich auch auf fehlende Rechte bzw. dass der User, der im TaskPlaner hinterlegt ist, nicht den richtigen PDFCreator-Drucker verwendet...
Gruß
em-pie
warum eigentlich mit dem PDFCreator rbeiten?
Wäre ein Tool zum convertieren nicht effizienter?
z.B. http://www.simplesystems.org/libtiff/
Ansonsten tippe ich auch auf fehlende Rechte bzw. dass der User, der im TaskPlaner hinterlegt ist, nicht den richtigen PDFCreator-Drucker verwendet...
Gruß
em-pie
Moin,
Eventuell wartest Du hier nicht lange genug. Während bei der Ausführung direkt auf der Shell das Ganze mit relativ hoher Priorität läuft, laufen die Prozesse der Aufgabenplanung mit relativ niedriger Priorität. Ich würde einfach mal den Timer z. B. auf 500 hochsetzen, bevor ich den Prozess abbreche.
hth
Erik
Zitat von @lupolo:
while(!(Test-Path "D:\_PDF\$newname.pdf")){
> Start-Sleep -s 1
> $timer+=1
> if($timer -gt 60){
> "$LOGtext $newname nicht geschrieben" | Out-File -FilePath $logpath -append
> #get-Process -Name "PDFCreator" | foreach{Stop-Process}
> If((Get-Process -Name "PDFCreator").count -gt 0) {
> Get-Process -Name "PDFCreator" | where {$_.responding -like "False"} | stop-process -ErrorAction SilentlyContinue }
> #get-Process -Name ErrorReport | Stop-Process
> # break
>
> }
> start-sleep -s 1
> "$LOGtext warten beendet" | Out-File -FilePath $logpath -append}
> "$LOGtext Programm Durchgelaufen" | Out-File -FilePath $logpath -append
> }}}}}
>
Eventuell wartest Du hier nicht lange genug. Während bei der Ausführung direkt auf der Shell das Ganze mit relativ hoher Priorität läuft, laufen die Prozesse der Aufgabenplanung mit relativ niedriger Priorität. Ich würde einfach mal den Timer z. B. auf 500 hochsetzen, bevor ich den Prozess abbreche.
hth
Erik
Zitat von @lupolo:
@em-pie:
Weil ich anhand einer .csv Datei mir Werte aus der Datenbank ziehe und demnach auch die blabla.tif zu
konvertieren muss.
und die Daten holt der PDFCreator für dich aus der csv?@em-pie:
Weil ich anhand einer .csv Datei mir Werte aus der Datenbank ziehe und demnach auch die blabla.tif zu
$newname = 'Liefernachweis_'+$Nl_Nr+'_'+$Ku_Nr+'_AU'+$Ls_Nr
Wenn nicht, verstehe ich deine Antwort nicht.
Mit meiner obigen Lösung, bzw. ja eher dem Ansatz, wandelst du die TIF auch nur in eine PDF um, musst dazu aber keinen virtuellen Drucker installieren. Das läuft also auch, wenn mal kein PDFCreator vorhanden ist.
Bzgl. der Berechtigung: kannst du irgendeine banale Textdatei während deines Skriptes in das Zielverzeichnis schreiben?