MatWob80 10 Geschrieben 5. August 2011 Melden Teilen Geschrieben 5. August 2011 Hallo, ich habe mich jetzt schon ein bisschen in Powershell eingefuchst, bräuchte aber nochmal Hilfe. Also ich habe ein Verzeichnis XY unter einem bestimmten Pfad, darin möchte ich die jüngste Datei ermitteln. Wenn die jüngste Datei kleiner als 24 Std ist, soll eine ok Meldung kommen wenn sie größer als 24 Std. ist soll ein nicht ok angezeigt. habt ihr da mal ein Dedckansatz für mich. ich denke ich muss dort mit select-object und ft date arbeiten oder? Zitieren Link zu diesem Kommentar
magman 10 Geschrieben 5. August 2011 Melden Teilen Geschrieben 5. August 2011 Hi Mat ich würde es so machen if ((Get-ChildItem c:\temp |where-object{$_.lastwritetime -gt (get-date).adddays(-1)} |measure-object).count -gt 0){write-host "alles ok"} gruss martin Zitieren Link zu diesem Kommentar
MatWob80 10 Geschrieben 5. August 2011 Autor Melden Teilen Geschrieben 5. August 2011 ja das sieht ganz gut aus, aber wenn die jüngste Datei im Ordner älter als 24 Stunden ist, dann kommt keine Meldung wie kann ich den ndort auch noch ne Meldung einbauen Zitieren Link zu diesem Kommentar
gearloose 10 Geschrieben 5. August 2011 Melden Teilen Geschrieben 5. August 2011 (bearbeitet) Hi, hab das mal so gemacht hier musst du nur $date austauschen oder ein modifiziertes Datum einfügen. Was noch hilft ist get-help about_if das sind nützliche Infos zu if-Abfragen. get-childitem | foreach-object -process {if ($_.LastWriteTime -lt $date) {write-host "Alles OK!"} else {write-host "Naja..."}} Du musst halt noch -lt $date gegen -gt (get-date).adddays(-1) tauschen bearbeitet 5. August 2011 von gearloose Zitieren Link zu diesem Kommentar
MatWob80 10 Geschrieben 8. August 2011 Autor Melden Teilen Geschrieben 8. August 2011 {$_.lastwritetime -gt (get-date).adddays(-1)} |measure-object).count -gt 0) könnt ihr mir mal kurz erklären, was hier passiert. bzgl. dem -gt und dem measure Objekt. Kann man den eigentlichen Quellcode if ((Get-ChildItem c:\temp |where-object{$_.lastwritetime -gt (get-date).adddays(-1)} |measure-object).count -gt 0){write-host "alles ok"} noch verkürzen als oohne das Measure Objekt? Zitieren Link zu diesem Kommentar
blub 115 Geschrieben 8. August 2011 Melden Teilen Geschrieben 8. August 2011 ich finde diese zwanghaften Einzeiler mit zig Pipes gruselig zu lesen und nachzuvollziehen. Mach mal einen mehrzeiligen Code mit Variablen draus, dann wirds sicher klarer blub Zitieren Link zu diesem Kommentar
MatWob80 10 Geschrieben 8. August 2011 Autor Melden Teilen Geschrieben 8. August 2011 Hallo Blub, was meinst du jetzt genau? wollte auch zuzsätzlich wissen ob es auch ohne das Objekt geht und was die -gt bedeuten Zitieren Link zu diesem Kommentar
blub 115 Geschrieben 8. August 2011 Melden Teilen Geschrieben 8. August 2011 -gt bedeutet "greater than" oder "größer als" Ich habe -nimms bitte nicht persönlich!!- keine Lust mich in einen solchen Spaghetti-Code reinzudenken, nachzuvollziehen und vielleicht zu optimieren. Daher die Empfehlung das Teil erstmal zu entzerren, damit machst du es dir selbst und anderen einfach leichter. Das ist aber meine Meinung, andere Kollegen lieben solche Einzeiler blub Zitieren Link zu diesem Kommentar
gearloose 10 Geschrieben 8. August 2011 Melden Teilen Geschrieben 8. August 2011 Mir gehts da anders :D aber blub hat recht, so einen Spagehtti Code muss man nach und nach im Kopf durchgehen und ggf. testen damit das gewünschte Ergebnis zusammen kommt. Es geht ohne measure-object dazu müsste man aber ziemlich genau wissen wie Du dir deine Ausgabe vorstellt. Eine Liste oder auch nur eine einzelne Zeile. Es gibt da immer viele Möglichkeite was aber auch gut so ist. :) achso und -lt bedeutet "less than" also "kleiner als" Zitieren Link zu diesem Kommentar
Dukel 451 Geschrieben 8. August 2011 Melden Teilen Geschrieben 8. August 2011 So viele Antworten und dann ist auch nur die Hälfte der Anforderung umgesetzt. Der TO möchte eine Datei und nicht bei jeder wissen, ob diese älter ist als 24h. $file = Get-ChildItem | Sort-Object LastWriteTime -Descending | Select-Object -First 1 Und jetzt kommt ihr. Zitieren Link zu diesem Kommentar
mamamia 13 Geschrieben 8. August 2011 Melden Teilen Geschrieben 8. August 2011 (bearbeitet) So, mit deinem Code bekomme ich die jüngste Datei, aber ob die jünger als 24h ist, weiss ich nicht und eine Ausgabe gibts auch nicht. Daher hier mal mit deinem Code weitergemacht: if ((Get-ChildItem -Path "C:\tmp\" | Sort-Object LastWriteTime -Descending | Select-Object -First 1).LastWriteTime -lt (Get-Date).adddays(+1)) { Write-Host "kleiner 24h" } else { Write-Host "größer 24h" } Auch kein Spaghetti-Code, da sollten alle Anforderungen erfüllt sein :cool::cool: bearbeitet 8. August 2011 von mamamia Code angepasst 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.