Saiinox 2 Geschrieben 18. Mai 2022 Melden 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
BOfH_666 586 Geschrieben 18. Mai 2022 Melden 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
testperson 1.860 Geschrieben 19. Mai 2022 Melden 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
NilsK 3.046 Geschrieben 19. Mai 2022 Melden Geschrieben 19. Mai 2022 Moin, Ich werfe noch mal robocopy in den Ring, das kann genau sowas auch. Gruß, Nils 1
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde dich hier an.
Jetzt anmelden