=o-n-e= 10 Geschrieben 3. August 2017 Melden Teilen Geschrieben 3. August 2017 Hallo,ich habe folgendes Problem. Ich möchte gerne auf meiner NAS nach bestimmten Dateien via PowerShell suchen.Mein Laufwerk Y:\ hat verschiedene Unterordner, ich möchte alle Unterordner nach bestimmten Datei typen .nef & .jpg durchsuchen dabei möchte ich aber nur Dateien ausgeben die größer sind als 100MB. Des Weiteren sollen zwei Ordner auf dem Y:\ Laufwerk von der Suche ausgeschlossen werden. Soweit funktioniert das auch, allerdings werden die zwei Ordner die ich ausschließen möchte nicht berücksichtigt. Kann mir jemand helfen? In diesem beispiel hole ich mir erstmal mit alle unterordner mit "gci" anschließend werden diese in die variable "folders" gepackt. exclude funktioniert leider so nicht... cd Y:\ $folders=gci $exlude=@("folder1", "Folder2") $files=@("*.nef","*.jpg") Get-ChildItem -Path ($folders) -r -include ($files) (where-object {$_.length -gt 100mb -and ($_.FullName -notlike $exclude)} |select length) | Sort-Object length | ft fullname, length -AutoSize Zitieren Link zu diesem Kommentar
BOfH_666 577 Geschrieben 3. August 2017 Melden Teilen Geschrieben 3. August 2017 (bearbeitet) Ich weiß, es klingt ein bissl "von hinten durch die Brust ins Auge", aber wenn es Dir nur ums Auflisten geht (Du hast ja schließlich ein "ft" am Ende, kannst Du dafür prima robocopy benutzen. Mit der Option /L werden die gefundenen Dateien nur aufgelistet - nicht kopiert. Mit der Option /XD schließt Du Verzeichnisse aus und mit /MIN beschränkst Du die Suche auf Dateien einer bestimmten Mindesgröße .... und schneller dürfte robocopy vermutlich auch noch sein. robocopy Y:\ c:\temp *.jpg *.nef /L /S /XD Folder1 Folder2 /MIN 104857600 /FP ... also so sollte es eigentlich gehen ... und es lässt sich auch noch erweitern wenn Du magst. ;-) bearbeitet 3. August 2017 von BOfH_666 Zitieren Link zu diesem Kommentar
=o-n-e= 10 Geschrieben 3. August 2017 Autor Melden Teilen Geschrieben 3. August 2017 Ich weiß, es klingt ein bissl "von hinten durch die Brust ins Auge", aber wenn es Dir nur ums Auflisten geht (Du hast ja schließlich ein "ft" am Ende, kannst Du dafür prima robocopy benutzen. Mit der Option /L werden die gefundenen Dateien nur aufgelistet - nicht kopiert. Mit der Option /XD schließt Du Verzeichnisse aus und mit /MIN beschränkst Du die Suche auf Dateien einer bestimmten Mindesgröße .... und schneller dürfte robocopy vermutlich auch noch sein. robocopy Y:\ c:\temp *.jpg *.nef /L /S /XD Folder1 Folder2 /MIN 104857600 /FP ... also so sollte es eigentlich gehen ... und es lässt sich auch noch erweitern wenn Du magst. ;-) okay, vielen Dank. Wollte PowerShell benutzen da ich mich sowieso mehr damit beschäftigen wollte ;). Es geht mir nicht nur ums auflisten, ich will die liste evtl. ebenfalls ins Excel exportieren bzw. ein count einfügen zum zählen der Dateien. Zitieren Link zu diesem Kommentar
BOfH_666 577 Geschrieben 3. August 2017 Melden Teilen Geschrieben 3. August 2017 (bearbeitet) Dann kannst Du jetzt natürlich immernoch robocopy anweisen den Header und die Zusammenfassung wegzulassen, die Liste per Powershell einlesen und weiterparsen .... :-D Also so dann .... robocopy Y:\ c:\temp *.jpg *.nef /L /S /XD Folder1 Folder2 /MIN 104857600 /FP /NJH /NJS /NDL /XX bearbeitet 3. August 2017 von BOfH_666 Zitieren Link zu diesem Kommentar
Dukel 454 Geschrieben 3. August 2017 Melden Teilen Geschrieben 3. August 2017 Was ich auf den ersten blick sehe ist dass vor where-object eine Pipe muss und excludes ein Array ist. Hier musst du das ganze evtl. umbauen als Schleife. gci in eine Variable schreiben ist auch unnötig. Ich würde für sowas auch kein Robocopy nutzen und dann die ausgabe parsen. Zitieren Link zu diesem Kommentar
BOfH_666 577 Geschrieben 3. August 2017 Melden Teilen Geschrieben 3. August 2017 Oooops ... ja lustig ... auf die Powershell-Zeile hatte ich gar nicht geachtet .... so sollte es eigentlich funktionieren: Get-ChildItem -Path Y:\* -Recurse -Include *.jpg, *.neg | Where-Object {$_.length -gt 100mb -and $_.Directory -notmatch 'folder1|folder2'} | Sort-Object -Property length | Format-Table fullname, length -AutoSize Zitieren Link zu diesem Kommentar
=o-n-e= 10 Geschrieben 4. August 2017 Autor Melden Teilen Geschrieben 4. August 2017 (bearbeitet) Oooops ... ja lustig ... auf die Powershell-Zeile hatte ich gar nicht geachtet .... so sollte es eigentlich funktionieren: Get-ChildItem -Path Y:\* -Recurse -Include *.jpg, *.neg | Where-Object {$_.length -gt 100mb -and $_.Directory -notmatch 'folder1|folder2'} | Sort-Object -Property length | Format-Table fullname, length -AutoSize Super, das klappt... kann ich auch 'folder1|folder2' in eine variable packen? Des Weiteren habe ich die Dateien mit "Measure-Object" gezählt. Der Wert Average wird in Bytes angezeitg, kann ich das ändern? Meine Idee war den Wert Average in eine variable schreiben und diesen dann in MB/ GB berechnen. Wie bekomme ich die Ausgabe in eine Variable? Get-ChildItem -Path ($folders) -recurse -include ($files) | where-object {$_.length -gt $size -and $_.Directory -notmatch 'Folder1'} | Measure-Object -Property length -Maximum -Minimum -Average -Sum Grüße bearbeitet 4. August 2017 von =o-n-e= Zitieren Link zu diesem Kommentar
BOfH_666 577 Geschrieben 4. August 2017 Melden Teilen Geschrieben 4. August 2017 (bearbeitet) Super, das klappt... kann ich auch 'folder1|folder2' in eine variable packen? hmmmm ... wie könnte man sowas nur rausbekommen?? ... ich habe ne verrückte Idee - probier es doch einfach mal! :p ;) :D Des Weiteren habe ich die Dateien mit "Measure-Object" gezählt. Der Wert Average wird in Bytes angezeitg, kann ich das ändern? Meine Idee war den Wert Average in eine variable schreiben und diesen dann in MB/ GB berechnen. Wie bekomme ich die Ausgabe in eine Variable? Powershell nimmt Dir eine Menge Arbeit ab ... Du kannst einfach die Größe angeben, dann den Teiler angeben für die Einheit die Du haben willst und voilá - Powershell rechnet es für Dich um .... so hier z.B. 5242880 / 1MB Du kannst in Variablen packen was auch immer Du gerne möchtest. Was willst Du denn eigentlich damit anfangen? Vielleicht gibt es ja eine ganz andere Lösung für Deine Aufgabe .... bearbeitet 4. August 2017 von BOfH_666 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.