lupolo
Goto Top

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:
**********************
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

Content-ID: 467956

Url: https://administrator.de/contentid/467956

Ausgedruckt am: 22.11.2024 um 04:11 Uhr

Looser27
Looser27 01.07.2019 um 12:07:48 Uhr
Goto Top
Moin,

mit welchen Rechten führst Du das Skript aus?
Die Berechtigungen der Aufgabenplanung scheinen nicht zu passen. Nimm zum Testen doch mal den Domain-Admin-Account und kreuze an auch ohne aktive Anmeldung ausführen.

Gruß

Looser
lupolo
lupolo 01.07.2019 aktualisiert um 12:26:41 Uhr
Goto Top
Servus,

sorry hatte ich vergessen - die Aufgabe führt natürlich der Domain Admin aus
01
em-pie
em-pie 01.07.2019 um 12:28:59 Uhr
Goto Top
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
lupolo
lupolo 01.07.2019 um 13:33:34 Uhr
Goto Top
@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   
konvertieren muss.

Dachte ich auch aber die Berechtigungen passen alle, selbst wenn ich in den Ordner "jeder" mit dem Vollzugriff ausstatte. Sonst würde das manuelle Ausführen der PowerShell ja auch nicht funktionieren. Der PDFCreator selbst hat nur einen Drucker und sofern ich dort in der Druckerübersicht einen Test Druck mache klappt das auch.
Looser27
Looser27 01.07.2019 um 13:49:04 Uhr
Goto Top
Vielleicht hat der pdfcreator hier ein Problem. Kannst Du mal einen anderen pdf Drucker versuchen zum Testen (z.B. pdf24) ?
erikro
erikro 01.07.2019 um 14:13:04 Uhr
Goto Top
Moin,

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
lupolo
lupolo 01.07.2019 um 15:51:26 Uhr
Goto Top
Zitat von @Looser27:

Vielleicht hat der pdfcreator hier ein Problem. Kannst Du mal einen anderen pdf Drucker versuchen zum Testen (z.B. pdf24) ?

hab ich versucht - der reagiert irgendwie gar nicht. Keine Ahnung welche Einstellung dort gemacht werden muss - habe ganz normal das standard Profil auf Speichern angepasst - äquivalent zum PDFCreator versuche es morgen mal weiter - dort muss man scheinbar die .exe "C:\Program Files (x86)\PDF24\pdf24-DocTool.exe" verwenden.


Zitat von @erikro:


                        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


du meinst den?
if($timer -gt 300){

--> hat nix gebracht
em-pie
em-pie 01.07.2019 um 16:33:39 Uhr
Goto Top
Zitat von @lupolo:

@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   
konvertieren muss.
und die Daten holt der PDFCreator für dich aus der csv?
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?