# Monday, June 15, 2009

Aufgrund der besseren Wartbarkeit sind bei unseren Projekten die Datenbank-Skripte für die Entwickler in kleine Häppchen geteilt. Für Kunden benötigen wir aber natürlich nur ein Skript, das alle Änderungen in einer Datei zusammen fasst.

Da ich mich schon immer mal mit der Powershell beschäftigen wollte, dachte ich, das wäre mal eine gute Gelegenheit damit mal rumzuspielen.

Entstanden ist daraus das folgende Skript:

 

#    -------------------------------
#    GenerateDatabaseUpdate.ps1
#    Author: Karim El Jed
#    -------------------------------
#    Mit diesem Skript können mehrere kleine Datenbankskripte zu einer Datei zusammengefasst werden.
#
#    PARAMETER:
#            -from    Die Datenbankversion, die aktualisiert werden soll (immer in der Form "x.y" angeben!)
#
#            -to        Die Datenbankversion auf die aktualisiert werden soll (immer in der Form "x.y" angeben!)
#
#            -dir    Spezifiziert das Verzeichnis, in dem die Ordner mit den Update-Skripten sind
#
#    BEISPIEL:
#            .\GenerateDatabaseUpdate.ps1 -from 1.0 -to 1.3 -dir C:\temp\Updates
#
#    Die einzelnen Skripte müssen in Ordnern unterhalb des in dir spezifizierten Verzeichnisses in der richtigen Reihenfolge (nach Namen sortiert) liegen.
#    Beispiel: "010_Skript1.sql", "020_Skript2.sql"
#    Die Unterordner müssen der Namenskonvention "[minorversion] to [majorversion]" folgen.
#
#    c:\temp\updates
#        -> 1.0 to 1.1
#        -> 1.1 to 1.2
#        -> 1.2 to 1.3

param([string]$dir, [string]$from, [string]$to)

$directory = new-object IO.DirectoryInfo($dir)
write-host "Dir:" $directory.FullName

$fileName = $directory.FullName + "\update " + $from + " to " + $to + ".sql"

$file = new-object IO.FileInfo($filename)

write-host $file.Fullname
if($file.Exists)
{
    $file.Delete()
}

$dirs =  $directory.GetDirectories("* to *")
$nl =  [Environment]::NewLine

foreach ($d in $dirs)
{
    $s = @($d.Name.Split(" "))
    $f1 = [float]::Parse($s[0].Replace(".", ","))
    $f2 = [float]::Parse($s[2].Replace(".", ","))

    if($f1 -ge $from)
    {
        if($f2 -le $to)
        {
            $parseDir = $directory.FullName + "\" + $s[0] + " to " + $s[2]

            $nl + "-- ++++++++++++++ " + $s[0] + " to " + $s[2] + " ++++++++++++++" + $nl >> $filename
            dir $parseDir | foreach-object { Get-Content $_.FullName >> $fileName }
            write-host "$parseDir ..."
        }
    }   
}

write-host "$nl Skript saved as '$filename' $nl"

posted on Monday, June 15, 2009 9:12:38 AM (GMT Daylight Time, UTC+01:00)  #    Comments [0]
Related posts:
Business Contact Manager 2007 im Netzwerk installieren
IE Developer Toolbar 1.0
SQL Scripter: Daten einfach weitergeben