none
Powershell Script funktioniert nicht zu 100%. (Druck mehrerer PDF) Einzel PDF funktioniert aber RRS feed

  • Frage

  • Hallo,

    das Script hat vor einiger Zeit noch funktioniert. Aber plötzlich funktioniert es nicht mehr. Wenn ich statt *.pdf den direkten Dateiname angebe und nun das Script starte, funktioniert es. Sehr merkwürdig.

    Sinn und Absicht ist natürlich, dass beliebige PDFs mit unterschiedlichen Dateinamen ausgedruckt werden.

    #params from OD
    param (
        [string]$file = "C:\Scans\*.pdf",
        $number_of_copies = 1
     )


     for ($i = 1; $i -le $number_of_copies; $i++) {
     
        cmd /C "lpr -S 10.39.33.204 -P hpdrucker $file"
     
     }

    Dienstag, 19. Oktober 2021 10:09

Antworten

  • Moin,

    wie äußert sich denn "funktioniert nicht"? Nach der Dokumentation musst Du an lpr eine einzelne Datei übergeben. Damit bräuchtest Du so etwas wie

    param (
        [string]$file = "C:\Scans\Urkunden\*.pdf",
        [int]$number_of_copies = 1
    )
    foreach ($onefile in (Get-ChildItem $file -File)) {
        for ($i = 1; $i -le $number_of_copies; $i++) {
            cmd /C "lpr -S 10.39.33.204 -P hpprinter ""$($onefile.FullName)"""
        }
    }

    EDIT: Je nachdem, in welcher Reihenfolge Du die Kopien haben willst, falls mehrere angefordert werden, müsstest Du evtl. die äußere und die innere Schleife vertauschen. Mein Beispiel würde alle Kopien derselben Datei hintereinander ausgeben. Sollte LPR.EXE früher Wildcards akzeptiert haben, würde Dein ursprüngliches Skript natürlich einmal alle Dateien hintereinander drucken, und dann nochmal alle hintereinander, falls mehr als eine Kopie gewünscht war.

    @Der Suchende: CMD /C könnte schon wichtig sein, je nachdem, wie sich der konkrete Befehl verhält, wenn er zu schnell hintereinander in der gleichen Shell aufgerufen wird... Ich habe LPR schon seit 10 Jahren nicht mehr benutzen müssen, kann es daher im konkreten Fall nicht beurteilen.


    Evgenij Smirnov

    http://evgenij.smirnov.de


    Mittwoch, 20. Oktober 2021 09:22

Alle Antworten

  • Das ist der falsche Ansatz.
    $FILE wird in deinem Fall nicht aufgelöst in die einzelnen Dokumente.
    Um aus der Powershell CMD-Kommandos anzuwenden benötigts du keinen Aufruf von CMD.

    lpr -S 10.39.33.204 -P hpdrucker $file

    $File wird nun in die Einzeldateien übersetzt, da "lpr" direkt aufgerufen wird.
    Prüfe aber auch, ob lpr auchmehr als eine Datei verarbeiten kann.

    Dienstag, 19. Oktober 2021 11:59
  • Moin,

    bitte Code als Code formatieren (2. Button von rechts).


    Evgenij Smirnov

    http://evgenij.smirnov.de

    Dienstag, 19. Oktober 2021 12:48
  • Auch 1-Zeiler;-)?
    Dienstag, 19. Oktober 2021 13:04
  • Auch 1-Zeiler;-)?

    Ja, definitiv. Man möchte den Code vielleicht rauskopieren, und der Code-Modus sorgt dafür, dass genau das in meinem Editor ankommt, was der Autor gepostet hat.

    Aber in dem Fall waren es 8 Zeilen (+ Leerzeilen).


    Evgenij Smirnov

    http://evgenij.smirnov.de

    Dienstag, 19. Oktober 2021 13:07
  • Entschuldigung, ich dachte da nun eher an meine Antwort;-).
    Dienstag, 19. Oktober 2021 13:12
  • Entschuldige, mein Fehler. Ich habe nun verschiedene Wege probiert. Aber leider funktioniert das Script nicht mehr. Vielleicht liegt es an einem Updates seitens Windows?

    #params from OD
    param (
        [string]$file = "C:\Scans\Urkunden\*.pdf",
        $number_of_copies = 1
     )
    
    
    
     for ($i = 1; $i -le $number_of_copies; $i++) {
     
        cmd /C "lpr -S 10.39.33.204 -P hpprinter $file"
     
     }
    

    Mittwoch, 20. Oktober 2021 08:53
  • Moin,

    wie äußert sich denn "funktioniert nicht"? Nach der Dokumentation musst Du an lpr eine einzelne Datei übergeben. Damit bräuchtest Du so etwas wie

    param (
        [string]$file = "C:\Scans\Urkunden\*.pdf",
        [int]$number_of_copies = 1
    )
    foreach ($onefile in (Get-ChildItem $file -File)) {
        for ($i = 1; $i -le $number_of_copies; $i++) {
            cmd /C "lpr -S 10.39.33.204 -P hpprinter ""$($onefile.FullName)"""
        }
    }

    EDIT: Je nachdem, in welcher Reihenfolge Du die Kopien haben willst, falls mehrere angefordert werden, müsstest Du evtl. die äußere und die innere Schleife vertauschen. Mein Beispiel würde alle Kopien derselben Datei hintereinander ausgeben. Sollte LPR.EXE früher Wildcards akzeptiert haben, würde Dein ursprüngliches Skript natürlich einmal alle Dateien hintereinander drucken, und dann nochmal alle hintereinander, falls mehr als eine Kopie gewünscht war.

    @Der Suchende: CMD /C könnte schon wichtig sein, je nachdem, wie sich der konkrete Befehl verhält, wenn er zu schnell hintereinander in der gleichen Shell aufgerufen wird... Ich habe LPR schon seit 10 Jahren nicht mehr benutzen müssen, kann es daher im konkreten Fall nicht beurteilen.


    Evgenij Smirnov

    http://evgenij.smirnov.de


    Mittwoch, 20. Oktober 2021 09:22
  • Hallo Evgenij,

    ich danke dich sehr. Das Script funktioniert sehr gut.!

    Donnerstag, 28. Oktober 2021 10:34