Sarina321 1 Geschrieben 16. April 2020 Melden Teilen Geschrieben 16. April 2020 Hallo Ich bin zur Zeit an einem Projekt dass Ordner nach Datum sortieren und ältere aktivieren soll. Da ich gerne mit Powershell arbeite, wenn auch erst kurz, wollte ich das ganze mal mit einem Script nach Datum sortieren. Leider funktioniert das nicht so wie ich es gern hätte. Hier mein Script: Get-ChildItem \\Filer1\Data$\S_Finanzen\Informatik -Recurse |` Sort-Object -Property LastWriteTime –Descending |` Where-Object {$_.Mode -notlike "d*"} |` Select-Object -First 30 |` Format-Table -Property LastWriteTime,FullName –AutoSize |` Out-GridView Hier die Fehlermeldung: Sort-Object : Es wurde kein Positionsparameter gefunden, der das Argument "â€Descending | Where-Object {.Mode -notlike d*} | Select-Object -First 30 | Format-Table -Property LastWriteTime,FullName â€AutoSize" akzeptiert. In H:\ZLI_Ausbildung\batch\Ordner_Sortierung.ps1:17 Zeichen:1 + Sort-Object -Property LastWriteTime –Descending |` + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidArgument: (:) [Sort-Object], ParameterBindingException + FullyQualifiedErrorId : PositionalParameterNotFound,Microsoft.PowerShell.Commands.SortObjectCommand Ich hoffe jemand kann mir ein bisschen helfen. Zitieren Link zu diesem Kommentar
testperson 1.677 Geschrieben 16. April 2020 Melden Teilen Geschrieben 16. April 2020 (bearbeitet) Hi, falls du das von irgendeiner Internetseite kopiert hast, solltest du alle Zeichen einmal durchgehen und prüfen, ob da nicht ein - (Bindestrich) bspw. zum – (Gedankenstrich) wurde. In solchen Fällen hilft es immer, den Text in Notepad o.ä. zu kopieren und dort "Korrektur zu lesen". Anführungszeichen unten/oben sind da auch gerne Kandidaten. ;) Gruß Jan bearbeitet 16. April 2020 von testperson Zitieren Link zu diesem Kommentar
Sarina321 1 Geschrieben 16. April 2020 Autor Melden Teilen Geschrieben 16. April 2020 Zitat falls du das von irgendeiner Internetseite kopiert hast, solltest du alle Zeichen einmal durchgehen und prüfen, ob da nicht ein - (Bindestrich) bspw. zum – (Gedankenstrich) wurde. Nein, habe es mit Hilfe eines Kollegen geschrieben, der weiss nur leider auch nicht weiter. Eigentlich war das ganze ein Befehlt in einer Zeile, er hat vorgeschlagen nach den Pipes Zeilenumbrüche einzufügen um es besser lesbar zu machen.. Könnte es an dem liegen? Aja, ich schreibe das ganze mit Visual Studio Code.. Zitieren Link zu diesem Kommentar
testperson 1.677 Geschrieben 16. April 2020 Melden Teilen Geschrieben 16. April 2020 Hi, habe grade nochmal geschaut. Hier im Forum scheint der Text falsch formatiert zu werden. Für Code wäre übrigens der Code-Tag ganz gut. :) Dein Where-Object müssest du allerdings auch mit dem Sort-Object tauschen. Ebenfalls kannst du keine "formatierte Tabelle (ft)" an Out-GridView weitergeben, also die Zeile einfach mal weglassen. Gruß Jan Zitieren Link zu diesem Kommentar
4077 30 Geschrieben 16. April 2020 Melden Teilen Geschrieben 16. April 2020 (bearbeitet) Ich bezweifel mal, dass nach Format-Table noch was sinnvolles rauskommt, da es IMHO die Inhalte nach Format-Table keine Objekte mehr sind, die sich weiter verarbeiten lassen. Und rein optisch ist das "-" vor Descending ein anderes "-". Bei mir funktioniert die o.a. Syntax ohne Format-Table und ein getauschtes "-". PS: auf die korrekter Sortierung habe ich erstmal nicht geachtet => siehe testperson bearbeitet 16. April 2020 von 4077 Zitieren Link zu diesem Kommentar
Sarina321 1 Geschrieben 16. April 2020 Autor Melden Teilen Geschrieben 16. April 2020 Get-ChildItem \\Filer1\Data$\S_Finanzen\Informatik -Recurse |` Where-Object {$_.Mode -notlike "d*"} |` Sort-Object -Property LastWriteTime –Descending |` Select-Object -First 30 |` Format-Table -Property LastWriteTime,FullName –AutoSize | So? Zitieren Link zu diesem Kommentar
BOfH_666 577 Geschrieben 16. April 2020 Melden Teilen Geschrieben 16. April 2020 (bearbeitet) Ein einigermaßen aktuelles Powershell vorausgesetzt, sollte das hier reichen: Get-ChildItem \\Filer1\Data$\S_Finanzen\Informatik -Recurse -Directory | Sort-Object -Property LastWriteTime -Descending | Select-Object -First 30 -Property LastWriteTime,FullName | Out-GridView Statt Out-GridView, kannst Du natürlich auch Format-Table benutzen ... die Properties kannst Du dann da weglassen, die hast Du schon im Select-Object. Bitte bitte bitte: niemals Backticks verwenden, wenn es nicht wirklich wirklich wriklich dringend nötig ist. Das wird so gut wie immer als sehr schlechter Stil angesehen. ... und ist im Zweifel auch noch fehlerträchtig. Edit: Ich sehe gerade, dass Du in Deinem Where-Object-Filter nach Mode -notlike "d*" filterst. Damit filterst Du alle Ordner raus. Ich nahm an, dass Du eben genau die Ordner sortieren wolltest!? Seit Powershell v3.0 hat das cmdlet Get-ChildItem den Parameter -File und -Directory. Damit limitierst Du die Ergebnisse auf Dateien bzw. Ordner. Dann brauchst Du das später nicht aufwändig rausfiltern. bearbeitet 16. April 2020 von BOfH_666 Code korrigiert: -File -> -Directory Zitieren Link zu diesem Kommentar
daabm 1.354 Geschrieben 16. April 2020 Melden Teilen Geschrieben 16. April 2020 vor 5 Stunden schrieb Sarina321: Sort-Object -Property LastWriteTime –Descending |` Habt Ihr das möglicherweise in Word (oder einer anderen Textverarbeitung) geschrieben? Der Bindestrich ist in der Tat nicht der "normale" Dash, das ist der von Word gern automatisch ersetzte lange Strich. Wurde ja schon erwähnt Und in Zeiten von Unicode landet der dann halt auch im Skript - und Sort-Object kann dann nichts damit anfangen. 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.