Als Entwickler möchte man immer wiederkehrende Aufgaben möglichst automatisieren um den Aufwand zu minimieren und Fehler zu vermeiden – sind solche Aufgaben dann doch meist auch recht nervig.

Nachfolgendes Script zeigt, wie per PowerShell eine Datenbank eines SQL Servers gelöscht und neu erstellt werden kann. Dabei wird zuvor überprüft, ob die gewünschte Datenbank verfügbar ist und nur in diesem Fall der Löschvorgang angestoßen.

# Recreate database

 

param (

    [string] $server = $(throw Write-Host "You did not define a database server" -ForegroundColor Red),

    [string] $database = $(throw Write-Host "You did not define a database" -ForegroundColor Red)

)

 

Write-Host "Trying to remove database [$database] ..." -ForegroundColor White

 

 trap [Exception] 

 { 

      write-host

      write-error $("TRAPPED: " + $_.Exception.GetType().FullName); 

      write-error $("TRAPPED: " + $_.Exception.Message); 

      break; 

}

 

[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.Smo")

$serverObj = new-object Microsoft.SqlServer.Management.Smo.Server ($server)

$databaseObj = new-object Microsoft.SqlServer.Management.Smo.Database

 

[Boolean] $databaseExists = 0

foreach ($_ in $serverObj.Databases)

{

    if ($_.Name -eq $database)

    {

        $databaseObj = $_

        $databaseExists = 1

    }

}

 

if ($databaseExists)

{

    Write-Host "Found database [$database] ... removing ..." -ForegroundColor White

    

    $serverObj.KillAllProcesses($databaseObj.Name)

    $serverObj.KillDatabase($databaseObj.Name)

    Write-Host "Database [$database] removed successfully." -ForegroundColor Green

}

 

Write-Host "Trying to create database [$database] ..." -ForegroundColor White

 

$databaseObj = new-object Microsoft.SqlServer.Management.Smo.Database ($serverObj, $database)

$databaseObj.Create()

 

Write-Host "Database [$database] created successfully." -ForegroundColor Green

Dem Script selbst müssen zwei benannte Parameter übergeben werden:

 .\RecreateDatabase.ps1 -server localhost -database myDatabase

Hierbei definiert -server die SQL Server Instanz und -database den Namen der Datenbank, die neu erstellt werden soll.

Der obige Aufruf würde beim ersten Mal folgenden Output generieren:

SQL Server Datenbank per PowerShell erstellen

Der zweite Aufruf ist dann schon spannender:

SQL Server Datenbank per PowerShell löschen und erstellen

Natürlich gibt es noch weitere Möglichkeiten. Einen Überblick der SQL Server Management Objects finden sich im MSDN.

Über den Autor

Norbert Eder

Ich bin ein leidenschaftlicher Softwareentwickler und Fotograf. Mein Wissen und meine Gedanken teile ich nicht nur hier im Blog, sondern auch in Fachartikeln und Büchern.

1 Kommentar