No description
  • PowerShell 100%
Find a file
2026-08-31 20:09:28 +02:00
config vor push 2026-08-31 20:08:13 +02:00
obsolete vor push 2026-08-31 20:08:13 +02:00
src/Windows PowerShell 5.1 vor push 2026-08-31 20:08:13 +02:00
.cleanup.json json 2026-08-31 20:09:28 +02:00
AGENTS.md AI: logging der änderungen an dateien 2026-08-21 14:28:29 +02:00
LICENSE vor push 2026-08-31 20:08:13 +02:00
PSBuild.ps1 vor push 2026-08-31 20:08:13 +02:00
README.md vor push 2026-08-31 20:08:13 +02:00

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:

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.