Jump to content

Skript zum Prüfen und Kopieren von PDF Dateien


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

Nabend...

Sry, aber ich bin erst heute Abend dazu gekommen, das Script auszuprobieren.

Die Funktion habe ich in die Datei "Microsoft.PowerShellISE_profile.ps1" kopiert und das Script so angepasst. Zumindest so wie es, denke ich, sein sollte.

 


$ToolPath = 'C:\Users\Alex\Desktop\Tools\pdftest\pdfinfo.exe'
$DefectFilesPath = 'N:\CutFolders'

Get-ChildItem -Path 'N:\rec\Verloren\Dokumente\pdf' -Filter *.pdf |
    ForEach-Object{
        $PDFFilePath = $PSItem.FullName  #  hier wird der komplette Pfad zur PDF-Datei innerhalb der switch-Anweisung nutzbar gemacht
        $Result = Start-ProcessWithTimeout -FilePath $ToolPath -ArgumentList $PSItem.FullName  # -Timeout 20  # anpassen falls nötig
        If($Result.State -eq 'Completed' -and $Result.HasMoreData){
            
            switch ($Result.Result) {
                {$Result.Result -match 'Usage:\s+pdfinfo'}            { "PDF-Tool SyntaxError - $PDFFilePath"; break }
                {$Result.Result -match 'find\s+trailer\s+dictionary'} { Move-Item -Path $PDFFilePath -Destination $DefectFilesPath; break }
                {$Result.Result -match 'PDF\s+version:'}              { "PDF file is valid    - $PDFFilePath"; break }
            }
        }
        Else{
            "PDF-Tool stuck ...   - $PDFFilePath"
        }
    }

Wenn ich es jetzt ausführe, dann bekomme ich aber eine Fehlermeldung:

 

Start-ProcessWithTimeout : The term 'Start-ProcessWithTimeout' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again.
At N:\rec\Verloren\Dokumente\pdftester4.ps1:8 char:19
+         $Result = Start-ProcessWithTimeout -FilePath $ToolPath -Argum ...
+                   ~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (Start-ProcessWithTimeout:String) [], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException
 
PDF-Tool stuck ...   - N:\rec\Verloren\Dokumente\pdf\1068125040.pdf

 

Fehlt evtl. hinter "$ToolPath -ArgumentList" was fehlt?

Oder habe ich etwas falsch ergänzt?

Link zu diesem Kommentar

Du hast die Funktionsdefinition in das Profil für die Powershell_ISE eingefügt. Führst Du das Script denn in der ISE aus? Wenn nicht, dann ist die Funktionsdefinition dort überflüssig.  ;-)  Wenn Du die Funktion nicht noch irgendwo anders brauchst, ist es vermutlich direkt im Skript am Besten aufgehoben. Oder Du speicherst den Code in einem separaten Skript. Nehmen wir mal an, Du nennst die Datei mit der Funktionsdefinition genauso wie die Funktion und speicherst sie im gleichen Verzeichnis wie das eigentliche Skript. Dann kannst Du am Anfang des eigentlichen Skriptes, das Skript mit der Funktionsdefinition mittels "dot-Sourcing" importieren - also so ungefähr:

 

. .\Start-ProcessWithTimeout.ps1
$ToolPath = 'C:\Users\Alex\Desktop\Tools\pdftest\pdfinfo.exe'
$DefectFilesPath = 'N:\CutFolders'

Get-ChildItem -Path 'N:\rec\Verloren\Dokumente\pdf' -Filter *.pdf |
    ForEach-Object{
        $PDFFilePath = $PSItem.FullName  #  hier wird der komplette Pfad zur PDF-Datei innerhalb der switch-Anweisung nutzbar gemacht
        $Result = Start-ProcessWithTimeout -FilePath $ToolPath -ArgumentList $PSItem.FullName  # -Timeout 20  # anpassen falls nötig
        If($Result.State -eq 'Completed' -and $Result.HasMoreData){
            
            switch ($Result.Result) {
                {$Result.Result -match 'Usage:\s+pdfinfo'}            { "PDF-Tool SyntaxError - $PDFFilePath"; break }
                {$Result.Result -match 'find\s+trailer\s+dictionary'} { Move-Item -Path $PDFFilePath -Destination $DefectFilesPath; break }
                {$Result.Result -match 'PDF\s+version:'}              { "PDF file is valid    - $PDFFilePath"; break }
            }
        }
        Else{
            "PDF-Tool stuck ...   - $PDFFilePath"
        }
    }

Wenn Du das Skript mit der Funktionsdefinition irgendwo anders speicherst, solltest Du den kompletten Pfad zu diesem Skript angeben, statt nur ".\".

 

Hier die Hilfe für about_Scripts. Lies Dir das am Besten mal alles durch und achte besonders auf das Kapitel "SCRIPT SCOPE AND DOT SOURCING".

 

bearbeitet von BOfH_666
Link zu diesem Kommentar

So, hab mir das noch einmal durchgelesen.

 

Also ich hab PowerShell_ISE genutzt. Durch den Eintrag in die Profil-Datei sollte die Funktion doch jetzt allgemein zur Verfügung stehen.

Oder verstehe ich das falsch?

 

Aber ich werde es mal versuchen, in dem ich die Funktion in eine separate Datei packe und als dot-sourcing in das Script einbinden.

Mal sehen ob das etwas ändert...

Link zu diesem Kommentar
  • 2 Wochen später...

Hallo Leute,

erst einmal ein frohes und besinnliches Fest und nochmal ein Danke für euer Hilfe.

 

Ich habe in der letzten Woche noch mal die Zeit gefunden, das Script zu testen. (Wer zum Teufel klaut eigentlich immer die Zeit vor Weihnachten?????)

 

Das Ergebniss.....

 

Ich habe die Funktion als separate Datei in dem Verzeichnis abgelegt und in dem Script über ". .\Start-ProcessWithTimeout.ps1" am Anfang eingefügt. In dieser Variante hat es einwandfrei funktioniert!!!

 

Warum es nicht funktioniert hat, als ich es in die Profildatei eingefügt hatte, kann ich einfach nicht nachvollziehen.

 

Bei einer weiteren Verzeichnis hatte es dann erstmal wieder nicht funktioniert. Allerdings habe ich da rausgefunden, das die Fehlermeldung von "pdfinfo.exe" differierte. Diese habe ich dann als potenzielle "Result"-Ergebniss zugefügt und schon funktioniert es wieder...

 

Also danke und ein frohes Fest....

Fosco

Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...