Powershell Script wird nicht komplett ausgeführt!
Hallo
folgendes Problem:
Ich habe eine Anwendung, welches das Script ausführt, aber nur Teil1!
Wenn ich das Script allerdings manuell starte, funktioniert es komplett (Teil1 und Teil2)
Wenn ich es über einen Taskplaner ausführe, funktioniert es auch komplett!
(Allerdings kann ich es hier nur alle 1 Minute starten, was zu lange dauert, dass ist mein Problem)
Das Script wird wie gesagt auch von der Anwendung ausgeführt, aber nur der erste Teil1.
Ich verstehe es nicht wirklich...
folgendes Problem:
Ich habe eine Anwendung, welches das Script ausführt, aber nur Teil1!
Wenn ich das Script allerdings manuell starte, funktioniert es komplett (Teil1 und Teil2)
Wenn ich es über einen Taskplaner ausführe, funktioniert es auch komplett!
(Allerdings kann ich es hier nur alle 1 Minute starten, was zu lange dauert, dass ist mein Problem)
Das Script wird wie gesagt auch von der Anwendung ausgeführt, aber nur der erste Teil1.
Ich verstehe es nicht wirklich...
#Teil1
foreach($item in (Get-ChildItem -Recurse -Path "C:\Scans\Urkunden\" | Where-Object {$_.Name -like "*GBATrue*.pdf*"}))
{
Move-Item -Path $item.FullName -Destination "C:\Scans\GBA\$(get-date -f yyyyMMddThhmmssZ" ")$($item.Name)"
}
Start-Sleep -s 5
foreach($item in (Get-ChildItem -Recurse -Path "C:\Scans\Urkunden\" | Where-Object {$_.Name -like "*HRTrue*.pdf*"}))
{
Move-Item -Path $item.FullName -Destination "C:\Scans\HR\$(get-date -f yyyyMMddThhmmssZ" ")$($item.Name)"
}
Start-Sleep -s 5
#Teil2
# Print Job
$printer = 'optimidoc'
gci "C:\Scans\Urkunden\1print\*.pdf" | %{
# starte PDF-Druck via Shell-Verb 'printto'
$pdfApp = (start-process $_ -Verb "printto" -PassThru -ArgumentList "$printer").ProcessName
# initialer sleep
sleep(3)
# loope solange bis Datei freigegeben wurde und lösche sie dann
while($true){del $_ -Force -EV err -EA SilentlyContinue; If($err){sleep(1)}else{break}}
}
# PDF Applikation beenden
get-process $pdfApp -ErrorAction SilentlyContinue | Stop-Process
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 554559
Url: https://administrator.de/contentid/554559
Ausgedruckt am: 22.11.2024 um 11:11 Uhr
4 Kommentare
Neuester Kommentar
Moin,
Ah, was für ein herrliches copy&paste script... *würg*
Das kann ca. 1235 Gründe haben... Evtl. schreibt "die Anwendung" ein Logfile? Oder es steht was im Eventlog? Rechte usw passen? Anwendung läuft im richtigen Userkontext? Drucker vorhanden? PS Fehlermeldung kommt keine?
Evtl. hilfts auch, wenn du ein bischen Errorhandling in das Script einbaust....
lg,
Slainte
Ah, was für ein herrliches copy&paste script... *würg*
Das kann ca. 1235 Gründe haben... Evtl. schreibt "die Anwendung" ein Logfile? Oder es steht was im Eventlog? Rechte usw passen? Anwendung läuft im richtigen Userkontext? Drucker vorhanden? PS Fehlermeldung kommt keine?
Evtl. hilfts auch, wenn du ein bischen Errorhandling in das Script einbaust....
lg,
Slainte
Moin,.
wozu sollen die gut sein?
Siehe: https://www.colorconsole.de/PS_Windows/de/Wait-Process.htm
Gruß
wozu sollen die gut sein?
# initialer sleep
sleep(3)
noch so'n Ding - hier aber mit Ansage ^^sleep(3)
# loope solange bis Datei freigegeben wurde und lösche sie dann
while($true){del $_ -Force -EV err -EA SilentlyContinue; If($err){sleep(1)}else{break}}
was soll sowas? Unsauberer und Fehleranfälliger geht ja schon nicht mehrwhile($true){del $_ -Force -EV err -EA SilentlyContinue; If($err){sleep(1)}else{break}}
Siehe: https://www.colorconsole.de/PS_Windows/de/Wait-Process.htm
Gruß
Zitat von @Kraemer:
was soll sowas? Unsauberer und Fehleranfälliger geht ja schon nicht mehr
Siehe: https://www.colorconsole.de/PS_Windows/de/Wait-Process.htm
Tja probier das doch erst mal selbst beim Adobe Reader oder Acrobat aus, da wartest du dann nämlich bist du schwarz bist, der schließt sich nämlich nicht nachdem er gedruckt hat sondern lässt den Prozess minimiert in der Taskleiste hängen, da bringt dir ein Wait-Process nichts! In dem Fall ist das also schon sinnvoll weil es nicht anders geht ohne sehr viel mehr Aufwand zu treiben. Das sind Workarounds für den Adobe-Bullshit, der sich eben nicht so verhält wie er eigentlich sollte.was soll sowas? Unsauberer und Fehleranfälliger geht ja schon nicht mehr
Siehe: https://www.colorconsole.de/PS_Windows/de/Wait-Process.htm
Ich würde gerne deine "funktionsfähige" Lösung für den Acrobat sehen wenn du eine bessere dafür hast. Du musst ja irgendwie das Druckende des PDFs ermitteln. Man kann natürlich mit [IO.File]::OpenWrite() und einem Try-Catch prüfen ob die Datei wieder beschreibbar ist und so die Freigabe ermitteln, aber im Endeffekt macht das obige das selbe nur halt über Remove-Item und Fehlerhandling.
Ich selbst verwende mittlerweile eine eigene DLL zum PDF-Drucken.
An den TO:
(Allerdings kann ich es hier nur alle 1 Minute starten, was zu lange dauert, dass ist mein Problem)
Ich würde hier stattdessen gleich zu einem FileSystemWatcher greifen der arbeitet die Files direkt ab wenn sie im Ordner abgelegt werden! So ist ein wiederholtes Aufrufen des selben Skriptes überflüssig und spart Ressourcen.Zitat von @143127:
Tja probier das doch erst mal selbst beim Adobe Reader oder Acrobat aus, da wartest du dann nämlich bist du schwarz bist, der schließt sich nämlich nicht nachdem er gedruckt hat sondern lässt den Prozess minimiert in der Taskleiste hängen, da bringt dir ein Wait-Process nichts!
Leider richtig. Ich bin allerdings davon ausgegangen, dass nicht der Adobe-Reader benutzt wird, weil das Script angeblich als geplanter Task fehlerfrei funktioniert. Auch @colinardo schreibt in dem Thread, aus dem der Code "geklaut" wurde, dass der AgroReader dafür nicht taugt..Tja probier das doch erst mal selbst beim Adobe Reader oder Acrobat aus, da wartest du dann nämlich bist du schwarz bist, der schließt sich nämlich nicht nachdem er gedruckt hat sondern lässt den Prozess minimiert in der Taskleiste hängen, da bringt dir ein Wait-Process nichts!
In dem Fall ist das also schon sinnvoll weil es nicht anders geht ohne sehr viel mehr Aufwand zu treiben. Das sind Workarounds für den Adobe-Bullshit, der sich eben nicht so verhält wie er eigentlich sollte.
für nen Script was ab und an mal läuft sicherlich. Eine Lösung ist sowas aber nicht.Ich würde gerne deine "funktionsfähige" Lösung für den Acrobat sehen wenn du eine bessere dafür hast. Du musst ja irgendwie das Druckende des PDFs ermitteln. Man kann natürlich mit [IO.File]::OpenWrite() und einem Try-Catch prüfen ob die Datei wieder beschreibbar ist und so die Freigabe ermitteln, aber im Endeffekt macht das obige das selbe nur halt über Remove-Item und Fehlerhandling.
Die Try-Catch-Methode würde ich bevorzugenIch selbst verwende mittlerweile eine eigene DLL zum PDF-Drucken.
Ich brauche das nicht all zu häufig. Aktuell noch im Einsatz eine Lösung mit Foxit und eine mit Cups