Sephiroth78 Geschrieben 24. April 2014 Geschrieben 24. April 2014 Könnte mal einer ein Auge drüber werfen ob das passt was ich da geschrieben habe? $Jetzt = Get-Date $Alterung = "45" $Aenderung = $Jetzt.AddDays(-$Alterung) $Files = Get-Childitem D:\Shares\FTP-Data\OtherPartners -Force | Where {$_.LastWriteTime -le "$Aenderung"} foreach ($File in $Files) { if ($File -ne $NULL) { write-host "Loesche $File" -ForegroundColor "DarkRed" Remove-Item $File.FullName -Force -recurse | out-null } else { Write-Host "Nichts zu loeschen!" -foregroundcolor "Green" } } Zitieren
Klotzkopp Geschrieben 24. April 2014 Geschrieben 24. April 2014 C++ ist das aber nicht. Verschoben -> Windows Zitieren
lilith2k3 Geschrieben 24. April 2014 Geschrieben 24. April 2014 Bitte Code-Blocks für Code benutzen, Danke :] Ich bin zwar kein Powershellexperte, aber das, was Du geschrieben hast, macht auf den ersten Blick einen guten Eindruck. Allerdings frage ich mich, warum Du das so verbose formulierst: $Jetzt = Get-Date $Alterung = "45" $Aenderung = $Jetzt.AddDays(-$Alterung) $Files = Get-Childitem D:\Shares\FTP-Data\OtherPartners -Force | Where {$_.LastWriteTime -le $Aenderung"} Ich hätte es etwas kompakter geschrieben: $FilesOlderThanLimit = Get-Childitem D:\Shares\FTP-Data\OtherPartners -Force | Where {$_.LastWriteTime -le Get-Date.AddDays(-45)} (Ich hoffe, dass das so funktioniert - habe gerade keine Powershell zum verifizieren) Zwar sind sprechende Variablen immer schön und Clean Code eine feine Sache. Aber bei so einem überschaubaren Skript, kann man auch mal eine Ausnahme machen. Zitieren
Tiro Geschrieben 24. April 2014 Geschrieben 24. April 2014 Eigentlich sollte der Einzeiler schon reichen. Get-ChildItem -Path <Pfad> -Recurse -force | Where-Object {$_.LastWriteTime -lt (get-date).adddays(-45)} | Remove-Item -recurse -force Foreach ist immer der letzte Ausweg in Powershell, weil keines der cmdlets das mitbring was man haben will. Ich sehe in der Ausgabe, was er gerade löscht, auch keinen besonderen Mehrwert. Zudem zitiere ich hier den großartigen MVP Don Jones: "every time you use "write-host" god kills a puppy!" :-) Zitieren
SilentDemise Geschrieben 24. April 2014 Geschrieben 24. April 2014 ein get-childitem -force sieht auch etwas merkwürdig aus. für ausgabe hier würd ich eher ein write-verbose benutzen. oder mir die gelöschten files oder mit format-list aufgereiht anzeigen lassen. Zitieren
Tiro Geschrieben 24. April 2014 Geschrieben 24. April 2014 Normalerweise hat man so ein Skript als tägliche Aufgabe laufen. Da sind Ausgaben eher minder wichtig, weil es sitzt ja keiner dabei und schaut, ob nachts um xx Uhr auch nicht die falsche Datei gelöscht wird. *bg* -Force [<SwitchParameter>] Ermöglicht dem Cmdlet das Abrufen von Elementen, auf die der Benutzer anderweitig nicht zugreifen kann, z.B. ausgeblendete Dateien oder Systemdateien. Nichts ist nerviger, als diese vermaledeiten thumbs.db Dateien, die im Verzeichnis existieren, weil "früher" einmal ein Bild vorhanden war. Die verhindern dann zu 99% auch das löschen leerer Ordner. ;-) (Get-ChildItem -Path <Pfad> -Recurse | Where-Object {$_.PSIsContainer -eq $True}) | Where-Object {$_.GetFiles().Count -eq 0} | Remove-Item -Recurse -Force Zitieren
SilentDemise Geschrieben 24. April 2014 Geschrieben 24. April 2014 ich weiß was der switch macht, in einem ftp verzeichnis ist er trotzdem eher überflüssig ;-) darum die ausgabe auf verbose, bei bedarf einschalten können ist hilfreich. Zitieren
Tiro Geschrieben 24. April 2014 Geschrieben 24. April 2014 Ich weiß, daß Dir, wertgeschätzter SilentDemise, die Feinheiten von "Get-childitem" klar sind und vermutlich weißt Du über Powershell auch mehr als ich, aber ich sah diese Zusatzinformation auch als selbstgestellten Lehrauftrag für alle anderen an. :-) Ich war halt gerade in Erklärstimmung. Sollte ich Dir damit zu nahe getreten sein, biete ich hiermit eine Entschuldigung an. Zitieren
SilentDemise Geschrieben 24. April 2014 Geschrieben 24. April 2014 gnihihi - passt schon Bin froh, dass es hier wenigstens ein paar leute gibt, mit denen man über die Feinheiten in der Powershell streiten kann Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.