Home  |  Über den Autor  |  Impressum  |  .NET Developer Group Braunschweig  |  AX Solutions

RSS 2.0 | Atom 1.0 | CDF | Send mail to the author(s)  
 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 6/15/2009 9:12:38 AM (W. Europe Standard Time, UTC+01:00)  #    Comments [0]