SQL Server Befehle mit PowerShell: Beispiel mehrere DB’s offline setzen

Mit Hilfe von PowerShell kann über die SQL Server Management Objekt (SMO) API direkt T-SQL Befehle auf einem SQL Server ausgeführt werden. Nachfolgend zeige ich ein Beispiel wie anhand einer Liste von Datenbanknamen (Textdatei) die entsprechenden Datenbanken offline gesetzen werden können.

# Voraussetzungen: SQL Server Management Objects (SMO) Assembly laden
 
# Für SQL Server 2012 nachfolgenden PowerShell Befehl nutzen:
Import-Module SQLPS -DisableNameChecking
# Für SQL Server 2008 R2 und SQL Server 2008 die folgenden Befehle ausführen:
add-type -AssemblyName “Microsoft.SqlServer.ConnectionInfo, Version=10.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91″ -ErrorAction Stop
add-type -AssemblyName “Microsoft.SqlServer.Smo, Version=10.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91″ -ErrorAction Stop
add-type -AssemblyName “Microsoft.SqlServer.SMOExtended, Version=10.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91″ -ErrorAction Stop
add-type -AssemblyName “Microsoft.SqlServer.SqlEnum, Version=10.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91″ -ErrorAction Stop
add-type -AssemblyName “Microsoft.SqlServer.Management.Sdk.Sfc, Version=10.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91″ -ErrorAction Stop
 
# Datenbankliste von Textdatei laden
$databases = Get-Content "C:\temp\DatabaseList.txt"
 
foreach ($db in $databases) {
    invoke-sqlcmd -ServerInstance localhost -Database master -Query "IF db_id('$db') is not null ALTER DATABASE $db SET OFFLINE WITH ROLLBACK IMMEDIATE"       
}
 
# Den PowerShell Provider wieder auf das Dateisystem zurücksetzen (optional)
cd C: