Saiinox 2 Geschrieben 18. Mai 2022 Melden Teilen Geschrieben 18. Mai 2022 Hi, ich hab nen kleines Skript gebastelt, welches Log Files die älter als 7 Tage sind löschen soll. In der PS ISE funktioniert es auch wunderbar, wenn ich es jedoch als ps1-Datei speichere und via PS Konsole aufrufen will, passiert nichts. Er wirft mir nirgends eine Fehlermeldung, wenn ich es über die Konsole in der IDE ausführen klappt es wunderbar. ExecutionPolicy ist bei mir auf Unrestricted Als Admin in der Konsole hatte ich es auch versucht, außerdem hab ich versucht das Teil von C:\ aufzurufen und vom Ordner in dem es liegt selbst. Im Skript selbst sind auch nur komplette Pfade angegeben. Ich vermute mal es muss irgendwas im Skript nicht passen, da vorherige Projekte wunderbar aufrufbar waren. Hier mein Code $ToLogDataPath = @( "C:\temp\*.txt" "C:\temp2\*.txt" "C:\temp4\*.txt" ) $TimeRange = -7 $LogFiles = @() function GetLogs { for ($i = 0; $i -lt ($global:ToLogDataPath).Count; $i++) { $global:LogFiles += get-childitem -Path $global:ToLogDataPath[$i] –recurse | where-object{$_.lastwritetime -lt (get-date).addDays($global:TimeRange)} } } function DelLogs { if (($global:LogFiles).Count -ge 0) { echo("Dateien älter als " + ($global:TimeRange * -1) + " Tage:") >> ("C:\Users\" + $env:USERNAME + "\Desktop\" + (get-date).ToString('dd-MM-yyyy') + "DelOldLogs.log") for ($j = 0; $j -lt ($global:LogFiles).Count; $j++) { echo $global:LogFiles[$j].FullName >> ("C:\Users\" + $env:USERNAME + "\Desktop\" + (get-date).ToString('dd-MM-yyyy') + "DelOldLogs.log") Remove-Item $global:LogFiles[$j].FullName } } else { echo("Es konnten keine Dateien älter als " + ($global:TimeRange * -1) + " Tage gefunden werden") >> ("C:\Users\" + $env:USERNAME + "\Desktop\" + (get-date).ToString('dd-MM-yyyy') + "DelOldLogs.log") } $global:LogFiles = $null } GetLogs DelLogs Falls es Verbesserungsvorschläge gibt, immer raus damit :) Danke für die Hilfe schonmal. Gruß Tim Zitieren Link zu diesem Kommentar
BOfH_666 577 Geschrieben 18. Mai 2022 Melden Teilen Geschrieben 18. Mai 2022 (bearbeitet) vor 49 Minuten schrieb Saiinox: In der PS ISE funktioniert es auch wunderbar, wenn ich es jedoch als ps1-Datei speichere und via PS Konsole aufrufen will, passiert nichts. Das liegt meistens an Variablen, die Du in der ISE gesetzt hast oder die noch vom vorherigen Ausführen des Codes übriggeblieben sind, aber in einer neu gestarteten Konsole eben nicht vorhanden sind. vor 49 Minuten schrieb Saiinox: $ToLogDataPath = @( "C:\temp\*.txt" "C:\temp2\*.txt" "C:\temp4\*.txt" ) Diese Pfade würde ich eher zu "C:\temp*\*" verkürzen und beim Get-ChildItem den -Filter auf "*.txt" spezifizieren. vor 49 Minuten schrieb Saiinox: for ($i = 0; $i -lt ($global:ToLogDataPath).Count; $i++) Über die Elemente eines gegebenen Arrays kann man mit "foreach ($Element in $ElementListe){ ... code}" iterieren. Im einfachsten Fall sollte das hier als Anfang genügen: $SevenDaysBefore = (Get-Date).Date.addDays(-7) $OldFileList = Get-ChildItem -Path 'C:\temp*\' -Filter '*.txt' -File -Recurse | Where-Object { $_.LastWriteTime -lt $SevenDaysBefore } $OldFileList | Remove-Item bearbeitet 18. Mai 2022 von BOfH_666 1 Zitieren Link zu diesem Kommentar
testperson 1.707 Geschrieben 19. Mai 2022 Melden Teilen Geschrieben 19. Mai 2022 Hi, PowerShell ist ja immer die bessere Wahl und cool, aber: FORFILES /P "C:\Temp" /S /M *.txt /D -7 /C "CMD /C del /Q @FILE" FORFILES /P "C:\Temp2" /S /M *.txt /D -7 /C "CMD /C del /Q @FILE" FORFILES /P "C:\Temp4" /S /M *.txt /D -7 /C "CMD /C del /Q @FILE" Gruß Jan 1 Zitieren Link zu diesem Kommentar
NilsK 2.957 Geschrieben 19. Mai 2022 Melden Teilen Geschrieben 19. Mai 2022 Moin, Ich werfe noch mal robocopy in den Ring, das kann genau sowas auch. Gruß, Nils 1 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.