Benutzer mit den meisten Antworten
Dateien löschen, wenn mehr als x vorhanden

Frage
-
Hallo zusammen,
ich bin absoluter Frischling im Thema Powershell und allgemein programmieren.
Ich habe von unserem Admin eine "kleine Aufgabe" erhalten, an welcher ich in teilen aber scheitere.
Folgendes Szenario:
Momentan erhalten wir jede Nacht von unseren Telefonanlagen ein Backup auf unseren FTP Server. Diese Sicherungen werden momentan jeden morgen per XCopy aus diesem Ordner in einen Saveordner verschoben. Hierfür habe ich die Powershell Syntax (nennt man das so?"") fertig aber noch nicht im Einsatz.
Jetzt kommen wir zu dem Punkt, welchen ich nicht gelöst bekomme:
Der Saveordner wird täglich per XCopy bereinigt. Hierzu wird jede Datei im Saveordner, welche älter als 30 Tage ist gelöscht. Dies wollen wir ändern, da wir im schlechtesten Fall ohne Datensicherung dastehen. Dies wäre der Fall wenn per FTP keine Daten mehr reinkommen, wir aber munter weiter alle Daten löschen, welche älter als 30 Tage sind. Besteht die Möglichkeit, dass wir statt älter X zu löschen hergehen und in jedem Ordner immer die 10 aktuellsten Sicherungen vorhalten und wenn dann die 11 reinkommt die älteste gelöscht wird?
Würde mich echt freuen, wenn man dies irgendwie geregelt bekommt.
Mit freundlichen Grüßen und einem Dank im Voraus
Sebastian
Antworten
-
Sinngemäß:
Get-ChildItem | Sort -Descending -Property LastWrite | Select -Skip 10 | Remove-Item
Greetings/Grüße, Martin - https://mvp.microsoft.com/en-us/PublicProfile/5000017 Mal ein gutes Buch über GPOs lesen? - http://www.amazon.de/Windows-Server-2012--8-Gruppenrichtlinien/dp/3866456956 Good or bad GPOs? My blog - http://evilgpo.blogspot.com And if IT bothers me? Coke bottle design refreshment - http://sdrv.ms/14t35cq
- Als Antwort vorgeschlagen BOfH-666 Donnerstag, 12. November 2020 13:36
- Als Antwort markiert Denniver ReiningMVP, Moderator Samstag, 14. November 2020 22:42
-
Get-Childitem erlaubt auch gezielt eine Path-Angabe.
https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.management/get-childitem?view=powershell-7.1Du kannst das in eine Schleife für jedes Verzeichnis aufrufen. Mit einem Befehl klappt das nicht, da der Filter "-skip 10" auf das Gesamtergebnis einer rekursiven Suche zielen würde.
Du kannst auch mittels "get-childitem -path ..." das Ganze für jedes Verzeichnis explizit aufrufen.
- Bearbeitet Der Suchende Donnerstag, 12. November 2020 14:48
- Als Antwort markiert Denniver ReiningMVP, Moderator Samstag, 14. November 2020 22:43
Alle Antworten
-
Sinngemäß:
Get-ChildItem | Sort -Descending -Property LastWrite | Select -Skip 10 | Remove-Item
Greetings/Grüße, Martin - https://mvp.microsoft.com/en-us/PublicProfile/5000017 Mal ein gutes Buch über GPOs lesen? - http://www.amazon.de/Windows-Server-2012--8-Gruppenrichtlinien/dp/3866456956 Good or bad GPOs? My blog - http://evilgpo.blogspot.com And if IT bothers me? Coke bottle design refreshment - http://sdrv.ms/14t35cq
- Als Antwort vorgeschlagen BOfH-666 Donnerstag, 12. November 2020 13:36
- Als Antwort markiert Denniver ReiningMVP, Moderator Samstag, 14. November 2020 22:42
-
Sinngemäß:
Get-ChildItem | Sort -Descending -Property LastWrite | Select -Skip 10 | Remove-Item
Evgenij Smirnov
-
...und beim Ausprobieren bitte aufpassen, in welchem Verzeichnis man sich gerade befindet! PowerShell mit Adminrechten startet gern in C:\Windows\system32, das wird dann schnell richtig spannend ;-)
Ein wenig Spannung kann in diesen diesigen Tagen nicht schaden (-; Spaß beiseite: Ich arbeite da gern mit
$whatifpreference=$true
Dann wird's nicht ganz so schlimm, wenn man mal das falsche Verzeichnis erwischt.
Greetings/Grüße, Martin - https://mvp.microsoft.com/en-us/PublicProfile/5000017 Mal ein gutes Buch über GPOs lesen? - http://www.amazon.de/Windows-Server-2012--8-Gruppenrichtlinien/dp/3866456956 Good or bad GPOs? My blog - http://evilgpo.blogspot.com And if IT bothers me? Coke bottle design refreshment - http://sdrv.ms/14t35cq
-
Hallo zusammen,
Danke für die mega schnelle Hilfe!
Mit Get-ChildItem | Sort -Descending -Property LastWriteTime | Select -Skip 10 | Remove-Item klappt es soweit.
Nun muss ich das ganze noch erweitern. Im Saveordner liegen wieder mehrere Unterverzeichnisse mit den entsprechenden Backups darin. Wenn ich das oben stehende im Saveordner ausführe, werden ja wahrscheinlich alle Ordner außer der 10 aktuellsten gelöscht, was natürlich wieder mehr als schlecht ist.
Besteht die Möglichkeit, den Befehl so zu erweitern, dass in jeden einzelnen Ordner geschaut wird und das Löschen dann entsprechend ausgeführt wird?
MfG Sebastian
-
Get-Childitem erlaubt auch gezielt eine Path-Angabe.
https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.management/get-childitem?view=powershell-7.1Du kannst das in eine Schleife für jedes Verzeichnis aufrufen. Mit einem Befehl klappt das nicht, da der Filter "-skip 10" auf das Gesamtergebnis einer rekursiven Suche zielen würde.
Du kannst auch mittels "get-childitem -path ..." das Ganze für jedes Verzeichnis explizit aufrufen.
- Bearbeitet Der Suchende Donnerstag, 12. November 2020 14:48
- Als Antwort markiert Denniver ReiningMVP, Moderator Samstag, 14. November 2020 22:43
-
Get-Childitem erlaubt auch gezielt eine Path-Angabe.
https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.management/get-childitem?view=powershell-7.1Du kannst das in eine Schleife für jedes Verzeichnis aufrufen. Mit einem Befehl klappt das nicht, da der Filter "-skip 10" auf das Gesamtergebnis einer rekursiven Suche zielen würde.
Du kannst auch mittels "get-childitem -path ..." das Ganze für jedes Verzeichnis explizit aufrufen.
-
Sebastian,
es ist nicht möglich (und auch nicht gewollt), Dir hier im Forum iterativ das Scripten beizubringen. Du wirst Dir also bitte die Grundlagen von Powershell erstmal selbst aneignen müssen. Es gibt dazu zahllose - auch kostenfreie - Quellen im Internet.
Vielleicht schaust Du mal hier vorbei:
Getting Started with PowerShell 3.0
Keine Angst, wenn es da um "alte" Versionen von Powershell geht - die Grundlagen sind immernoch die gleichen. ;-)
Live long and prosper!
(79,108,97,102|%{[char]$_})-join''