mk-prg-net \ ms-sql \admin \powershell

Powershell Verwaltung

Allgemeines zur Powershell

SQL- Server über Powershell steuern

Mit dem Dienstprogramm bzw. Modul sqlps werden Erweiterungen in der Powershell geladen, die den Zugriff auf den SQL- Server ermöglichen. Das Modul ist in einer Powershell- Sitzung wie folgt zu laden:

# Version der Powershell bestimmen
Write-Host $PSVersionTable.PSVersion
# SQL- Powershell- Modul importieren
Import-Module Sqlps -DisableNameChecking
# Listet alle CMD- Lets von SQLPS- Module auf
Get-Module -ListAvailable -Name Sqlps | foreach{Write-Host $_.ExportedCommands -Separator `n}

SQL- Kommandos über Powershell absetzen

Invoke-Sqlcmd ist ein CMD-let aus sqlps, durch welches SQL- Befehle an eine Datenbank aus der Powershell heraus gesendet werden können.

Im Folgenden ein Script, welches alle lokalen Benutzer liest und in die Tabelle UserTable einträgt:

# (C) Martin Korneffel 2016
# Einlesen aller lokalen Benutzer
Import-Module -Name Microsoft.Powershell.LocalAccounts
$AllUserNames = Get-LocalUser | Select-Object Name
$AllUserNames | ForEach{Write-Host $_.Name}
# SQL- Server Powershell- Module laden
#Import-Module -Name SQLPS
# Einen SQL- Insert- Befehl aus der Powershell heraus senden
Invoke-Sqlcmd -Query "Insert into dbo.UserNames (name) values ('T1')" -ServerInstance .\SQL2016dev -Database SimpleDB
# Alle lokalen Benutzer in die Tabelle eintragen
$AllUserNames | ForEach{Invoke-Sqlcmd -Query "insert into dbo.UserNames (name) values ('$($_.Name) ')" `
 -ServerInstance .\SQL2016dev `
 -Database SimpleDB }

Zugriff auf Ressourcen über SQL-Server Provider

Mittels des SQL- Server Providers werden die Ressourcen eines SQL- Servers als hierarchiches Verzeichnis dargestellt (Details hier):

# Zugriff auf die vom SQL Server Powershell Provider bereitgestellten Verzeichnisse
# Liste aller Ressourcen einer Datenbankinstanz
Write-Host "------------------------------------`n"
dir SQLSERVER:\SQL\localhost\SQL2016dev | foreach{Write-Host $_}
# Liste aller unterstützer Sprachen der Instanz
Write-Host "------------------------------------`n"
dir SQLSERVER:\SQL\localhost\SQL2016dev\Languages | foreach{Write-Host $_.Name}
# Liste aller Datenbanken einer Datenbankinstanz
Write-Host "------------------------------------`n"
dir SQLSERVER:\SQL\localhost\SQL2016dev\Databases | foreach{Write-Host $_}
# Liste aller Ressourcen des SQL- Server Agent
Write-Host "------------------------------------`n"
dir SQLSERVER:\SQL\localhost\SQL2016dev\JobServer | foreach{Write-Host $_}
# Liste aller konfigurerter Jobs auf dem SQL- Server Agent
Write-Host "------------------------------------`n"
dir SQLSERVER:\SQL\localhost\SQL2016dev\JobServer\Jobs | foreach{Write-Host $_}
# Liste aller Operatoren auf dem SQL- Server Agent
Write-Host "------------------------------------`n"
dir SQLSERVER:\SQL\localhost\SQL2016dev\JobServer\Operators | foreach{Write-Host $_.NAme}
Die Verzeichnisse liefern Objekte, deren Klassen in der Bibliothek Microsoft.SqlServer.Management.SMO definiert sind. Eigenschaften und Methoden des Database- Objekte können wie folgt bestimmt werden:
            
$MyDBVar = New-Object Microsoft.SqlServer.Management.SMO.Database  
$MyDBVar | Get-Member –Type Methods  
$MyDBVar | Get-Member -Type Properties