Powershell Script Umbenennen und Löschen

Haraldson

Lt. Junior Grade
Registriert
Nov. 2011
Beiträge
260
Hallo liebe Community,

stehe derzeit bei einem Problem und komme nicht weiter. Ich möchte gerne mit Powershell Dateien aus einem Ordner auslesen (Größe + Änderungsdatum) und danach folgendes Script erstellen:

- Wenn Datei größer als 500mb dann Datei umbenennen (z.B. Testdatei.log_old)

- Wenn bereits eine Datei vorhanden ist und diese älter als 14 Tage ist dann die alte Datei löschen und durch die neue Datei ersetzen.

Anzeigen der Datei ist kein Problem:

Set-Location C:\Testordner
Get-ChildItem -Recurse | Sort-Object -Property date | Select -First 10 Lastwritetime, @{Name="Megabytes";Expression={[Math]::round($_.length / 1MB, 2)}}

Nun habe ich das Problem das ich entsprechende Datei nicht anwählen kann und per Ren umbennnen kann bzw. ist mir unklar wie ich mit -Property festlegen kann das er eine Datei nimmt die < 500mb ist . . .

Danke schonmal vorab für die Hilfe !
 
Na das mit der Größe ist einfach, hintendran einfach:
| Where-Object Megabytes -gt 500000
Und wenn du bei den Select zusätzlich noch "Name" mitholst hast du auch den Namen:
Get-ChildItem -Recurse | Sort-Object -Property date | Select -First 10 Name,Lastwritetime, @{Name="Megabytes";Expression={[Math]::round($_.length / 1MB, 2)}} | Where-Object Megabytes -gt 500
 
Zuletzt bearbeitet:
d2boxSteve schrieb:
Na das mit der Größe ist einfach, hintendran einfach:
| Where-Object Megabytes -gt 500000
Und wenn du bei den Select zusätzlich noch "Name" mitholst hast du auch den Namen:
Get-ChildItem -Recurse | Sort-Object -Property date | Select -First 10 Name,Lastwritetime, @{Name="Megabytes";Expression={[Math]::round($_.length / 1MB, 2)}} | Where-Object Megabytes -gt 500


wäre es dann nicht weiter zum umbennen Get-ChildItem -Recurse | Sort-Object -Property date | Select -First 10 Name,Lastwritetime, @{Name="Megabytes";Expression={[Math]::round($_.length / 1MB, 2)}} | Where-Object Megabytes -gt | foreach { $_. rename-item odr so?
 
  • Gefällt mir
Reaktionen: Haraldson
Dann sollte man aber statt "Name" den "Fullname" nehmen, sonst findet er die Datei aus Unterordnern nicht (wegen dem "-Recurse").
 
Schmidij schrieb:
wäre es dann nicht weiter zum umbennen Get-ChildItem -Recurse | Sort-Object -Property date | Select -First 10 Name,Lastwritetime, @{Name="Megabytes";Expression={[Math]::round($_.length / 1MB, 2)}} | Where-Object Megabytes -gt | foreach { $_. rename-item odr so?

Dann bekomme ich den Fehler


In Zeile:2 Zeichen:210
+ ... / 1MB, 2)}} | Where-Object Megabytes -gt | foreach { $_. rename-item
+ ~~~~~
Unerwartetes Token "-item" in Ausdruck oder Anweisung.
In Zeile:2 Zeichen:198
 
Megabytes -gt | fo ... da fehlt doch deine 500 für 500 MB :=))
 
hätte es jetzt so gelöst (wahrscheinlich nicht die schönste Lösung) :-)

Ohne die 500mb Filterung

Code:
get-ChildItem -Recurse | Sort-Object -Property date | Select -First 10 Fullname,Lastwritetime |

foreach {

#$_.FullName

$newName = $_.FullName + "_old"

Rename-Item -Path $_.FullName -NewName $newName

Write-Host $newName


}
 
  • Gefällt mir
Reaktionen: Haraldson
Das Problem ist ich brauche die 500mb Filterung da er die Datei ja erst umbenennen soll wenn Sie größer als 500mb ist . . .

Geht im speziellen um eine Log Datei die sich mehr oder minder zumüllt und damit das Ganze System lahm legt wenn sie zu groß ist . . . . von daher möchte ich erst ab 500mb aufwärts umbenennen und 14tage aufbehalten (damit sie im Backup mit drin ist) und dann löschen . . .
 
Hab jetzt aus irgendeinem Grund das Problem, dass das Script irgendwie nicht mehr geht . . . .

Set-Location C:\Testordner
Get-ChildItem -Recurse | Sort-Object -Property date | Select -First 10 FullName,Lastwritetime, @{Name="Megabytes";Expression={[Math]::round($_.length / 1MB, 2)}} | Where-Object Megabytes -gt | foreach { $_. rename-item}

Liegt das daran das bei rename-item der Pfad fehlt oder holt der sich den oben durch die Set-Location?
 
@Haraldson
Ungetestet, aber so müsste es funktionieren:

PowerShell:
Get-ChildItem 'C:\Testordner' -Recurse | ´
Sort-Object -Property date | ´
Select -First 10 FullName,Lastwritetime, ´
@{Name="Megabytes";Expression={[Math]::round($_.length / 1MB, 2)}} | ´
Where-Object 'Megabytes' -gt 500 | foreach {$_ rename-item}
 
Zuletzt bearbeitet von einem Moderator:
Zurück
Oben