PowerShell Skript beim Löschen 'ja, alle' automatisieren

@PHuV sicher? Sym links unterscheiden sich ja doch etwas von klassischen Links. Für einen normalen Benutzer ist es nicht mal mehr transparent, wo die Daten da eigentlich liegen.
 
Was ist ein "klassischer Link" bei Dir? Im Prinzip sind die meisten verwendeten Benutzerlinks ausschließlich Symbolische Links.
Spielt keine Rolle, da sie alle nur auf ein Verzeichnis oder Datei verweisen, und im Fall von Windows sogar separat gespeichert werden, so daß kein Datenblock verbraucht wird. Das ist quasi nur ein Referenz oder Verknüpfung.
 
Zuletzt bearbeitet:
Ja, kann ich bestätigen, da ich über ein ähnliches Skript Symlinks lösche ;)
 
  • Gefällt mir
Reaktionen: rg88
eweu schrieb:
Ich verstehe nicht wirklich, wo hier das Missverständnis liegt, der TE hat halt keine Auskunft über die genaue Ordnerstruktur gegeben. Deine Lösung würde Ordner auswählen, mit einem Timestamp älter als 30 Stunden und diesen löschen, unabhängig davon, welchen Timestamp potenzielle Files in Unterordnern dieses Ordners haben, die eben neuer sein können als der Timestamp des Überordners. Somit werden in diesem Fall Files gelöscht, die weniger alt als 30 Stunden sind und der TE sagt er will nur Files löschen, die älter als 30 Stunden sind. Das ist doch ein offensichtliches Problem, oder etwa nicht? Oder was übersehe ich deiner Meinung nach?
sehe ich genauso wie du. Wahrscheinlich ist es wirklich nur ein Edge-Case (kommt auf die Struktur des Backups an), aber theoretisch würde ein alter Ordner rekursiv gelöscht, der potentielle neue Daten enthält.

Zum testen: ein alten Testordner mit ner alten und ner neuen Datei, neben dem Orner ebenfalls ne neue und ne alte Datei.

PowerShell:
Get-ChildItem -Recurse | select FullName,CreationTime

FullName                                CreationTime
--------                                ------------
C:\Users\x\test12\testdir       11.02.2022 01:00:00
C:\Users\x\test12\alt           12.01.2022 01:00:00
C:\Users\x\test12\test2         26.09.2022 07:54:39
C:\Users\x\test12\testdir\neu   26.09.2022 08:08:31
C:\Users\x\test12\testdir\test1 11.01.2022 01:00:00

PowerShell:
Get-ChildItem -Recurse | Where CreationTime -lt  (Get-Date).AddHours(-30)  | Remove-Item -whatif

Bestätigung
Das Element unter "Microsoft.PowerShell.Core\FileSystem::C:\Users\x\test12\testdir" verfügt über untergeordnete
 Elemente, und der Recurse-Parameter wurde nicht angegeben. Wenn Sie fortfahren, werden mit dem Element auch alle
untergeordneten Elemente entfernt. Möchten Sie den Vorgang wirklich fortsetzen?
[J] Ja  [A] Ja, alle  [N] Nein  [K] Nein, keine  [H] Anhalten  [?] Hilfe (Standard ist "J"):
WhatIf: Ausführen des Vorgangs "Verzeichnis entfernen" für das Ziel "C:\Users\x\test12\testdir".
WhatIf: Ausführen des Vorgangs "Datei entfernen" für das Ziel "C:\Users\x\test12\alt".
WhatIf: Ausführen des Vorgangs "Datei entfernen" für das Ziel "C:\Users\x\test12\testdir\test1".

der Befehl würde also den gesamten Ordner "testdir" löschen.

PowerShell:
Get-ChildItem -Recurse -File | Where CreationTime -lt  (Get-Date).AddHours(-30)  | Remove-Item -whatif
WhatIf: Ausführen des Vorgangs "Datei entfernen" für das Ziel "C:\Users\x\test12\alt".
WhatIf: Ausführen des Vorgangs "Datei entfernen" für das Ziel "C:\Users\x\test12\testdir\test1".

Dieser Befehl hingegen löscht nur Dateien, braucht auch keine Bestätigung.

im Zweifel also erst einmal nur Dateien löschen lassen und anschließend leere Ordner löschen.
 
  • Gefällt mir
Reaktionen: eweu und Maviapril2
Zurück
Oben