Fosco 10 Geschrieben 8. Dezember 2019 Autor Melden Teilen Geschrieben 8. Dezember 2019 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? Zitieren Link zu diesem Kommentar
BOfH_666 577 Geschrieben 9. Dezember 2019 Melden Teilen Geschrieben 9. Dezember 2019 (bearbeitet) 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 9. Dezember 2019 von BOfH_666 Zitieren Link zu diesem Kommentar
Fosco 10 Geschrieben 9. Dezember 2019 Autor Melden Teilen Geschrieben 9. Dezember 2019 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... Zitieren Link zu diesem Kommentar
tesso 375 Geschrieben 9. Dezember 2019 Melden Teilen Geschrieben 9. Dezember 2019 Es gibt ZWEI Profildateien. Eins für ie ISE und eins für die Commandline. Wenn du es bei im ISE Profil eingefügt hast steht es nur dort zur Verfügung. Wie BofH schon schrieb, würde ich die Funktion eher im Skript belassen. Es sei denn du brauchst die stets und ständig (was ich nicht annehme). Zitieren Link zu diesem Kommentar
BOfH_666 577 Geschrieben 9. Dezember 2019 Melden Teilen Geschrieben 9. Dezember 2019 vor 19 Minuten schrieb tesso: Es gibt ZWEI Profildateien. ... wenn ich das etwas korrigieren/präzisieren darf ... Understanding the Six PowerShell Profiles ... (mit VSCode kommt quasi noch eins dazu ) Zitieren Link zu diesem Kommentar
tesso 375 Geschrieben 9. Dezember 2019 Melden Teilen Geschrieben 9. Dezember 2019 Ja, ok. Wir haben noch einige mehr. So genau wollte ich es dem TO nicht antun. Zitieren Link zu diesem Kommentar
Fosco 10 Geschrieben 24. Dezember 2019 Autor Melden Teilen Geschrieben 24. Dezember 2019 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 Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.