- PowerShell 100%
| config | ||
| obsolete | ||
| src/Windows PowerShell 5.1 | ||
| .cleanup.json | ||
| AGENTS.md | ||
| LICENSE | ||
| PSBuild.ps1 | ||
| README.md | ||
ps_Invoke-FileRotation
PowerShell Script, um regelmäßig anfallende Dateiversionen mit einheitlichem Dateinamen (Logfiles, Backups etc.) zu bereinigen. Dabei können die Dateien komprimiert, verschoben oder gelöscht (oder eine Kombination davon) werden.
Die zu bearbeitenden Pfade und Dateimuster werden per Konfigurationsdatei im JSON-Format an das Script übergeben und entsprechend abgearbeitet. Auf diese Weise lassen sich mit einem Scriptaufruf eine Vielzahl von Pfaden bearbeiten, wie es z.B. beim großzügig aktivierten Logging auf Exchange Servern notwendig sein kann.
Die ursprüngliche Idee für das Script stammt von dieser Website:
- https://dejanstojanovic.net/powershell/2018/january/clean-up-iis-log-files-from-web-server-using-powershell/
- https://dejanstojanovic.net/powershell/2018/january/automated-clean-up-and-archive-of-log-files-with-powershell-5/
Die Funktionalität wurde jedoch stark erweitert und das Script umgebaut.
Voraussetzungen
Das Script benötigt als Voraussetzung das Modul 7Zip4PowerShell in der Version
2.5.0. (https://www.powershellgallery.com/packages/7Zip4Powershell/)
Das Modul in der jeweils aktuellsten Version kann mit
Install-Module -Name 7Zip4Powershell installiert werden.
Die Version unter src\Windows PowerShell 5.1 erfordert die Windows PowerShell
5.1. Eine Version für PowerShell Core 7.1 ist in Arbeit.
Zudem werden für die Ausführung entsprechende Rechte benötigt, um auf die zu verarbeitenden Verzeichnisse und Dateien zugreifen zu dürfen.
Installation
Das Script muss nicht installiert werden.
Es genügt die Dateien und Verzeichnisse unterhalb von
src\Windows PowerShell 5.1 in ein beliebiges Verzeichnis zu kopieren und das
Script Invoke-FileRotation.ps1 von dort aufzurufen.
Sofern die Version für PowerShell Core 7.1 fertig ist, ist analog mit den Dateien in dem entsprechenden Verzeichnis zu verfahren.
Aufruf
$ powershell.exe -executionpolicy bypass -file C:\Scripts\Invoke-FileRotation.ps1 -ConfigFile "konfigurationsdatei.json"
Parameter
ConfigFile: Angabe der Konfigurationsdatei als json-Datei. Wird nichts angegeben sucht das Script nach .cleanup.json im aktuellen Verzeichnis
IgnoreRemote: In der Konfig kann für jeden Eintrag angegeben werden, dass die Bearbeitung auf einem entfernten System erfolgen soll. Enthält die Konfiguration derartige Einträge, verhindert dieser Schalter die Verarbeitung (z.B. wenn man gerade keinen Zugriff auf diese Ressourcen hat, um Fehler zu vermeiden)
GetCredential: Schalter, der die Eingabe von Zugangsdaten für den Remotezugriff anfordert. Dieser Schalter darf nicht bei unbeaufsichtigter Ausführung des Scripts benutzt werden, da das Script dann an dieser Stelle hängen bleibt!
Konfigurationsdatei
Die Konfigurationsdatei ist eine JSON-Datei.
Beispiel:
{
"Archiver": {
"ArchiveType": "SevenZip",
"CompressionLevel": "High"
},
"ArchiveJobList": [
{
"Enabled": false,
"Description": "Testeintrag zum verarbeiten auf einem Remote System",
"Server": "HOSTNAME",
"Path": "C:\\Transcription",
"Filter": "tsc_Import-ADUser*.log",
"LogfileAge": 10,
"ArchiveAge": 20,
"Recurse": true
"PreCommand": "net stop <DIENSTNAME>"
"PostCommand": "net start <DIENSTNAME>"
},
{
"Enabled": true,
"Description": "Testeintrag",
"Path": "C:\\Transcription",
"Filter": "tsc_Import-ADUser*.log",
"LogfileAge": 7,
"ArchiveAge": 14
}
]
}
Archiver
In diesem Abschnitt werden die Einstellungen für die Komprimierung hinterlegt:
- ArchiveType: Archiv-Typ. Möglich sind Zip, SevenZip, GZip, BZip2, Tar, XZ
- CompressionLevel: Kompressionsstärke. Möglich sind None, Fast, Low, Normal, High oder Ultra.
ArchiveJobList
Dieser Abschnitt enthält eine Liste mit den Daten für den jeweiligen Job. Es können mehrere Attribute angegeben werden. Erforderlich sind in jedem Fall:
- Path: Verzeichnis, in dem die zu verarbeitenden Dateien liegen. Der Backslash (\) muss mit einem weiteren Backslash maskiert werden!
- Filter: Muster des Dateinamens, nach dem gesucht wird.
Zusätzlich können die folgenden Attribute gesetzt werden:
- Enabled: true/false Schaltet die Verarbeitung des Eintrags ein oder aus. Default true
- Description: ist eine kurze Beschreibung (wird z.Zt. nicht ausgewertet).
- LogfileAge: Integerwert. Dateien, deren Erstellungsdatum mehr als diesen Wert an Tagen zurückliegt werden verarbeitet (komprimiert). Default 7.
- ArchiveAge: Integerwert. Archive, bei denen das Erstellungsdatum der Ausgangs- datei mehr als dieser Wert an Tagen zurück liegt werden gelöscht. Default 14.
- Recurse: true/false Verarbeitet Dateien auch in Unterverzeichnissen. Default ist false
Weiterhin sind folgende Attribute vorbereitet, die entsprechende Funktionalität ist allerdings noch nicht, bzw. noch nicht vollständig implementiert:
- Server: Hostname eines Rechners, auf dem die Verarbeitung remote erfolgen soll
- MoveToPath: Dateipfad, wo die Quelldateien hin verschoben werden sollen. Um Dateien, die sich aktuell im Zugriff befinden und gesperrt sind löschen zu können:
- PreCommand: Befehl, der vor dem Packen und Löschen ausgeführt werden soll
- PostCommand: Befehl, der nach dem Packen und Löschen ausgeführt werden soll
Andere Attribute können angegeben werden. Diese werden allerdings nicht ausgewertet. Es tritt jedoch auch kein Fehler auf.