Samstag, 23. November 2013

Powershell: Dateiversionierung

Hier ein kleines Codebeispiel für eine Dateiversionierung von Logfiles:

$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
}

Keine Kommentare:

Kommentar veröffentlichen