Sie sind auf der Suche nach einem einfachen PowerShell Script zur automatischen Erstellung und Versionierung von Logfiles? Dann sind Sie hier genau richtig. Denn im Folgenden zeige ich Ihnen, wie Sie Logfiles schreiben und diese automatisiert in spezifischen Backup Ordnern versionieren können. Sie kennen sicherlich das Problem, dass immer nur die aktuellste Version eines Logfiles behalten werden soll, um nicht den Überblick zu verlieren. Um diese Übersichtlichkeit zu gewährleisten, habe ich ein PowerShell Script entwickelt, mit dem jeweils nur die aktuellste Version eines Logfiles im konfigurierbaren Ordner

C:\Temp\Logs

angelegt wird. Diese Konfiguration wird in Zeile 3 mit der Variable

$QuellPfad

angegeben. Die alten Logfiles werden als Backup in den folgenden konfigurierbaren Ordner verschoben werden:

C:\Temp\Logs\Backup

Diese Konfiguration wird in Zeile 4 mit der Variable

$BackupPfad

vorgenommen. Mit der Variable

$Muster

in Zeile 5 kann bestimmt werden, nach welcher Art von Dateien, das Script suchen soll. In meinem Beispiel sucht das Script nach allen Dateien, die das Datei-Format „.log“ haben.

$counter = 0 # Counter für das Log File
$Logfile = "C:\temp\Logs\$ou_$(gc env:computername)-$counter.log" # Logfile Pfad

$QuellPfad = 'C:\Temp\Logs'
$BackupPfad = "C:\Temp\Logs\Backup"
$Muster = "*-*.log"
$SuchMuster = "$QuellPfad\$Muster"

# Testn ob der Pfad bereits erstellt ist
if(Test-Path($QuellPfad))
{
    echo 'Log folder exists already'

    # Datei(en) einlesen
    $Files = Get-Item -Path $SuchMuster

    if ($Files) 
    {
        foreach ($File in $Files)
        {

            # Istversion in Backup Ordner kopieren falls noch nicht vorhanden
            if (-not (Test-Path "$BackupPfad\$($file.name)"))
            {
                Write-Host "Sichere $($file.name) nach $BackupPfad"
                $null = Copy-Item $file $BackupPfad
            }

            # Name zerlegen
            [String]$TeilName = $File.BaseName.Substring(0,($file.BaseName.LastIndexOf("-")))
            [int]$IstVersion = $file.BaseName.Split("-")[2]
            [String]$Extension = $file.Extension

            # Version hochzählen
            [string]$SollVersion = $IstVersion + 1

            # Neuen Dateinamen zusammensetzen
            [String]$DateiNameNeu = "{0}-{1}{2}" -f $TeilName,$Sollversion,$Extension
            $counter = $counter + 1
            # Datei kopieren
            if (-not (Test-Path "$QuellPfad\$DateiNameNeu"))
            {
                Write-Host "Kopiere $DateiNameNeu in $QuellPfad"
                $Null = $File.CopyTo("$QuellPfad\$DateiNameNeu")
            }

            # Alte Version löschen. Zum "scharf" machen den WhatIf Schalter entfernen
            Write-Host "Lösche $($File.Fullname)"
            Remove-Item $File
        }
    }
    else
    {
        Write-Warning "Keine passenden Dateien in $Quellpfad nach Muster `"$Muster`" gefunden"
    }
}
else
{
    New-Item -Path $QuellPfad -ItemType directory
    New-Item -Path $BackupPfad -ItemType directory
    echo 'Logfile: C:\temp\Logs'
}

# Neue Ereignisse in das Logfile schreiben
Function LogWrite
{
   Param ([string]$logstring)

   Add-content $Logfile -value $logstring
}

Viel Erfolg beim ausprobieren des PowerShell Scirpts.

 

 

Bildquelle: Pixabay