Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

PDF via Powershell drucken - Reader nach druck schließen

Frage Microsoft Windows Tools

Mitglied: Fr4nki

Fr4nki (Level 1) - Jetzt verbinden

15.12.2014 um 09:45 Uhr, 4803 Aufrufe, 11 Kommentare, 3 Danke

Hallo Zusammen,

ich habe ein Powershell Skript geschrieben, dass mir Archive entpackt und die darin enthaltenen PDF-Dateien druckt.
Das klappt ganz gut, jedoch soll das Skript die Dateien nach dem Drucken wieder löschen.
Aktiviere ich die Lösch-Funktion, so klappt das ganz nicht mehr, denn das Powershell Skript geht hin und setzt den Druckbefehl ab und löscht darauf hin die Datei sofort, bevor diese ausgedruckt wurde.
Nun würd ich ja ein Wait-Process einbauen, jedoch schließt sich das Reader Programm nach dem Druck leider nicht von alleine.
Ich habe bisher den Foxit-PDF Reader und den Adobe PDF Reader ausprobiert.

Kann mir jemand von euch ein Programm nennen, dass sich nach dem Drucken automatisch schließt, sodass man es überwachen kann.
Oder kann mir jemand von euch sagen wie ich das im Skript realisieren kann?

Viele Grüße
Fr4nki
Mitglied: TlBERlUS
15.12.2014, aktualisiert um 09:56 Uhr
Hi,

Reader-Prozess beenden?

https://www.google.de/?gws_rd=ssl#q=powershell+prozess+beenden

Grüße,

Tiberius
Bitte warten ..
Mitglied: Doskias
15.12.2014 um 09:56 Uhr
Jetzt ohne dein Skript zu kennen fällt mir nur die Holzhammer-Methode ein:

taskkill /IM AcroRd32.exe

Ansonsten poste hier das Skript um eine vernünftige Lösung zu erhalten
Bitte warten ..
Mitglied: Fr4nki
15.12.2014 um 10:38 Uhr
Es geht mir eigentlich darum zu wissen wie ich prüfen kann wann die Datei gedruckt wurde. Somit das Skript erst danach zum löschen übergeht.

Also das hier ist das Skript:

function entpackenunddrucken() {

$printer = $($args[1]).Substring(11,4)
$tempverz = "C:\in1\temp\" + $printer
$archiv = "C:\in1\DONE"
$entpackverz = "-o" + $tempverz

  1. Entpacken
cd "C:\7-Zip"
./7z.exe e $($args[0]) $entpackverz *.pdf -r
move-item $($args[0]) $archiv
start-sleep -s 1

  1. Drucken
cd $tempverz
ForEach( $File in Get-ChildItem ) {
#C:\Adobe\Reader\Reader\AcroRd32.exe /N /T $File.FullName $printer
C:\Foxit\FoxitReader.exe /t $File.Fullname $printer
Remove-Item $File.Fullname
} }

  1. Funktionsaufruf
cd C:\in1
ForEach( $File in Get-ChildItem ) { if ($File.Name -like "*.tar") { entpackenunddrucken $File.Fullname $File.Name } }
Bitte warten ..
Mitglied: TlBERlUS
15.12.2014, aktualisiert um 11:39 Uhr
Wenn du nicht gerade win win 8 oder Server 2012 hast, könntest du mit

Get-CimInstance win32_printjob
(gwmi win32_printer).printerstatus

versuchen zu basteln. Ist allerdings(imho) fehleranfällig, wenn du auf erfolgreichen Druck-Auftrag prüfen willst.
Bitte warten ..
Mitglied: colinardo
16.12.2014, aktualisiert um 22:11 Uhr
Hallo Fr4nkie,
ich mach das mit dem Adobe (Reader oder Acrobat) immer so:
01.
# Drucker definieren 
02.
$printer = 'HP Laserjet 1320' 
03.
gci "C:\Ordner\*.pdf" | %{ 
04.
    # starte PDF-Druck via Shell-Verb 'printto' 
05.
    $pdfApp = (start-process $_ -Verb "printto" -PassThru -ArgumentList "$printer").ProcessName 
06.
    # initialer sleep 
07.
    sleep(3) 
08.
    # loope solange bis Datei freigegeben wurde und lösche sie dann 
09.
    while($true){del $_ -Force -EV err -EA SilentlyContinue; If($err){sleep(1)}else{break}} 
10.
11.
 
12.
# PDF Applikation beenden 
13.
get-process $pdfApp -ErrorAction SilentlyContinue | Stop-Process
oder wenn stattdessen nur das Verb print im System vorhanden ist, dann so:
01.
$printer = 'HP Laserjet 1320' 
02.
# store original printer 
03.
$originalPrinter = gwmi Win32_Printer -Filter "Default='true'" 
04.
# Set Default Printer 
05.
[void](gwmi Win32_Printer -Filter "Name='$printer'").SetDefaultPrinter() 
06.
 
07.
gci "C:\Ordner\*.pdf" | %{ 
08.
    $pdfApp = (start-process $_ -Verb "print" -PassThru).ProcessName 
09.
    sleep(3) 
10.
    while($true){del $_ -Force -EV err -EA SilentlyContinue; If($err){sleep(1)}else{break}} 
11.
12.
get-process $pdfApp -ErrorAction SilentlyContinue | Stop-Process 
13.
 
14.
#restore original default printer 
15.
#[void]$originalPrinter.SetDefaultPrinter()
habe das ganze mal in eine Function gepackt:
Funktion: Print-PDF
01.
<# 
02.
     ==== @colinardo  / @administrator.de ==== 
03.
#> 
04.
function Print-PDF { 
05.
    param( 
06.
        [parameter(mandatory=$true,ValueFromPipelineByPropertyName=$true)][Alias("Fullname")][ValidateNotNullOrEmpty()][string[]]$files, 
07.
        [ValidateScript({(gwmi Win32_Printer -Filter "Name='$_'")})][string]$printer, 
08.
        [switch]$DeleteAfterPrint 
09.
10.
    begin{ 
11.
        # set printer if defined in parameter 
12.
        if ($printer -ne ''){ 
13.
            # store original printer 
14.
            $originalPrinter = gwmi Win32_Printer -Filter "Default='true'" 
15.
            # set default printer temporarily to defined printer 
16.
            [void](gwmi Win32_Printer -Filter "Name='$printer'").SetDefaultPrinter() 
17.
18.
 
19.
        # function to check file lock state 
20.
        $CheckFileStatus = { 
21.
            param([string]$filePath) 
22.
            try{ 
23.
                $fileStream = (New-Object System.IO.FileInfo $filePath).OpenWrite() 
24.
                $fileStream.Close(); $fileStream.Dispose() 
25.
                # file is not locked by another process 
26.
                return $true 
27.
            }catch{ 
28.
                # file is locked 
29.
                return $false 
30.
31.
32.
        $pdfAppID = $null 
33.
34.
    process{ 
35.
        $files | %{ 
36.
            write-host "Printing document: '$_' ..." -ForegroundColor Green 
37.
            # start printing pdf with default print-handler in the system 
38.
            $pdfApp = (start-process $_ -Verb "print" -PassThru).ProcessName 
39.
            # sleep time  / increase this parameter in case files get not printed 
40.
            sleep(3) 
41.
            # check file-lock-status in loop until it's free 
42.
            while(!(&$CheckFileStatus $_)){sleep(1)} 
43.
            # delete file if desired by user 
44.
            if ($DeleteAfterPrint){ 
45.
                write-host "Deleting document: '$_' ..." -ForegroundColor Yellow 
46.
                del $_ -Force 
47.
48.
49.
50.
    end{ 
51.
        # kill pdf viewer process 
52.
        get-process $pdfApp -EA SilentlyContinue | Stop-Process 
53.
 
54.
        if ($printer -ne ''){ 
55.
            #restore original default printer 
56.
            [void]$originalPrinter.SetDefaultPrinter() 
57.
58.
59.
}
Diese lässt sich dann folgendermaßen verwenden:
Beispiele
Drucken auf anderen Drucker mit anschließendem Löschen des PDFs
gci "C:\Ordner\*.pdf" | print-pdf -printer "HP Laserjet 1320" -DeleteAfterPrint
Drucken auf Default-Printer ohne Löschen
gci "C:\Ordner\*.pdf" | print-pdf
Zur Info: Bei Bedarf den sleep Parameter in Zeile 40 anpassen, wenn die Dateien nicht gedruckt werden.

Grüße Uwe
Bitte warten ..
Mitglied: Andinistrator1
13.04.2015, aktualisiert um 15:29 Uhr
Super Sache! Funktioniert mit Netzlaufwerk und -drucker.

Ich hab es mit Adobe probiert. Hier öffnet sich das Programm, druckt und schließt wieder. Kann man das noch unterdrücken oder gibt es ein besseres PDF Tool für diesen Zweck?

Wie ist der Code für *.HTM Daten? Der Internexexplorer ist schon drauf, d.h. ich könnte auf Adobe verzichten.
Bitte warten ..
Mitglied: colinardo
13.04.2015, aktualisiert um 17:23 Uhr
Hallo Andinistrator,
Zitat von Andinistrator1:
Ich hab es mit Adobe probiert. Hier öffnet sich das Programm, druckt und schließt wieder. Kann man das noch
unterdrücken oder gibt es ein besseres PDF Tool für diesen Zweck?
Lässt sich eventuell machen, muss ich nachher erst mal testen ...
-edit- Acrobat wie so viele andere Apps ignorieren hier das man sie unsichtbar öffnen möchte..., aber das Fenster ist ja eigentlich minimiert (zumindest Acrobat bei mir) so dass das ja bei einem unbeaufsichtigten System eigentlich egal ist.

Wie ist der Code für *.HTM Daten? Der Internexexplorer ist schon drauf, d.h. ich könnte auf Adobe verzichten.
Der IE ist hier mal wieder speziell wegen Sicherheit & Co.

Du kannst aber mal das hier probieren, das den Druckdialog mit einem Enter "fernsteuert":
/(Bei Bedarf die sleep-Zeiten an dein System anpassen)//
01.
# Drucker auf dem gedruckt werden soll 
02.
$printer = 'HP Laserjet 1320' 
03.
# Original Drucker speichern 
04.
$originalPrinter = gwmi Win32_Printer -Filter "Default='true'" 
05.
# Set Default Printer 
06.
[void](gwmi Win32_Printer -Filter "Name='$printer'").SetDefaultPrinter() 
07.
$objShell = New-Object -Com Wscript.Shell 
08.
 
09.
gci "C:\Ordner\*.html" | %{ 
10.
    start-process $_ -Verb "print" -PassThru 
11.
    sleep(2) 
12.
    $objShell.SendKeys("{ENTER}") 
13.
    sleep(1) 
14.
    while($true){del $_ -Force -EV err -EA SilentlyContinue; If($err){sleep(1)}else{break}} 
15.
16.
 
17.
# Original Standarddrucker wiederherstellen 
18.
[void]$originalPrinter.SetDefaultPrinter()
Grüße Uwe
Bitte warten ..
Mitglied: Andinistrator1
14.04.2015 um 12:43 Uhr
Vielen Dank, dass sieht gut aus. Sleep auf 5 und es wird automatisch gedruckt.

Gibt es noch einen fixen Parameter für

- Querformat (statt Hoch)
- ohne Kopfzeile (Seite 1 von 1 wird gedruckt)
- ohne Fußzeile (Quelle und Datum wird gedruckt)?


Beim PDF Script haben auch Netzwerkdrucker funktioniert, welche über ein Druckserver mit meinem Server verbunden sind. Das hier nun nicht mehr zu klappen. Wenn der Drucker lokal auf dem Server eingerichtet ist, aber schon.

Netzwerk-Laufwerke werden aber weiterhin ausgelesen.
Bitte warten ..
Mitglied: colinardo
14.04.2015, aktualisiert um 12:52 Uhr
Zitat von Andinistrator1:
Gibt es noch einen fixen Parameter für

- Querformat (statt Hoch)
- ohne Kopfzeile (Seite 1 von 1 wird gedruckt)
- ohne Fußzeile (Quelle und Datum wird gedruckt)?
Nein. Ebenfalls nur über Tastenfernsteuerung, aber das wird dann unzuverlässig.
Beim PDF Script haben auch Netzwerkdrucker funktioniert, welche über ein Druckserver mit meinem Server verbunden sind. Das
hier nun nicht mehr zu klappen. Wenn der Drucker lokal auf dem Server eingerichtet ist, aber schon.
Normal ...Geht nur mit lokal eingerichteten Druckern, da dieser temporär als Standard gesetzt werden muss ...
Der IE kennt ja kein printto Verb, deshalb.
Netzwerk-Laufwerke werden aber weiterhin ausgelesen.
logisch ...
Bitte warten ..
Mitglied: Andinistrator1
14.04.2015 um 14:25 Uhr
Ja also das PDF Script läuft einwandfrei, im Test hatte ich es nun doppelt laufen, d.h.

2 Ordnerpfade drucken auf
2 unterschiedliche Drucker

Hier hab ich nun auch Acrobat Reader (V2015.007.20033) probiert, hier geht das Fenster auf und zu, eine Minimierung beim Start hab ich nicht gefunden.

Manchmal verschluckt es sich aber, Datei nicht gefunden..., so als ob er schneller löscht wie er druckt. Ich hab den Sleep Wert auf 5 hochgesetzt, dann läuft es durch.

Thank you colinardo
Bitte warten ..
Mitglied: JK23JK
12.11.2015 um 11:46 Uhr
Hallo Uwe,

ich habe gerade deinen INteressanten Beitrag hier empfohlen bekommen.
Und dein Script ist fast genau das was ich suche/ benötige.
Nur leider bin ich jetzt nicht gerade der Pro was PoweShell etc. angeht.

Könntest du mir bei zwei dingen auf die Sprünge helfen ?

Er soll anstatt einem gezielten den Standartdrucker des ausführenden verwenden
und er soll die PDF nach dem drucken nicht löschen sondern in C:\Test\Archiv verschieben:

Was muss ich wo wie editieren.

  1. Drucker definieren
$printer = 'HP Laserjet 1320'
gci "C:\Ordner\*.pdf" | %{
          1. starte PDF-Druck via Shell-Verb 'printto'
          $pdfApp = (start-process $_ -Verb "printto" -PassThru -ArgumentList "$printer").ProcessName
                  1. initialer sleep
                  sleep(3)
                          1. 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}}
                          }
                          1. PDF Applikation beenden
                          get-process $pdfApp -ErrorAction SilentlyContinue | Stop-Process


                          Vielen Dank vorab und sorry für die Anfänger Frage - aber iwie stehe ich auf dem Schlauch

                          Beste Grüße
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (21)

Frage von Xaero1982 zum Thema Microsoft ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...

Windows Update
Treiberinstallation durch Windows Update läßt sich nicht verhindern (17)

Frage von liquidbase zum Thema Windows Update ...