SQL Abfrage mit PowerShell
Windows PowerShell ist inzwischen schon sehr mächtig. Unter anderem ist es möglich eine SQL Abfrage mit PowerShell abzusetzen, ohne das SQL Server Modul zu installieren. SQL ist eine Datenbanksprache, welche in der heutigen Zeit kaum mehr wegzudenken ist. Alle komplexeren Softwaresysteme oder Webserver verwenden im Hintergrund Datenbanken. Um nun Datensätze aus der Datenbank zu lesen, oder andere SQL Querys abzusetzen, kann Windows PowerShell verwendet werden. Wie man SQL Abfragen mit PowerShell absetzen kann, lest ihr in diesem Beitrag.
mcmurryjulie / Pixabay
SQL Abfrage mit PowerShell
Mit der Hilfe dieser kleinen PowerShell Funktion kann ganz einfach ein SQL Query, beziehungsweise eine SQL Abfrage mit PowerShell abgesetzt werden. Hierzu wird eine Funktion namens “Perform-SQL” gebaut, mit der sich dann ein Befehl absetzen lässt.
# Beispiel 1 (auth integriert): Perform-SQL -sqlhost 192.168.10.20\instanzname -DB YOURDATABASE -sqlQuery 'Select * from yourdatabase' # Beispiel 2 (auth mit user + passwort): Perform-SQL -sqlhost 192.168.10.20\instanzname -DB YOURDATABASE -user YOURUSER -password YOURPASSWORD -sqlQuery 'Select * from yourdatabase' function Perform-SQL { Param( [string]$sqlHost, [string]$DB, [string]$SqlQuery, [string]$User, [string]$Password ) if (($User) -and ($Password)) { $connectionParam = "Data Source=$sqlHost;User ID=$User;Password=$Password;Initial Catalog=$DB" } else { $connectionParam = "Data Source=$sqlHost;Integrated Security=SSPI;Initial Catalog=$DB" } $sqlconnection = new-object system.data.SqlClient.SQLConnection($connectionParam) $command = new-object system.data.sqlclient.sqlcommand($sqlQuery,$sqlconnection) $sqlconnection.Open() $sqlDataAdapter = New-Object System.Data.sqlclient.sqlDataAdapter $command $dataset = New-Object System.Data.DataSet $sqlDataAdapter.Fill($dataSet) | Out-Null $sqlconnection.Close() $dataSet.Tables }
Natürlich müssen nach dem “Perform-SQL” Kommando noch weitere Parameter übergeben werden:
- -Host
- -DB (database)
- -user
- -password
- -sqlQuery
Nach dem Parameter “-sqlQuery” folgt der eigentliche SQL Befehl, der abgesetzt werden soll. In Zeile 01-05 habe ich zwei Beispiele für euch, wie eine solche SQL Abfrage mit PowerShell gemacht werden kann. Ich hoffe wir konnten euch weiterhelfen! 🙂
Auch interessant?!
Wordpress SQL Befehle
Hallo Johannes,
vielen Dank für diesen tollen Beitrag – ich wusste tatsächlich noch nicht, dass das mit der PowerShell möglich ist.
Meine Frage: Lassen sich die Ergebnisse der SQL-Abfrage auch direkt in eine csv-Datei speichern?
Viele Grüße
René
Hallo Rene,
ja das geht, am sinnigsten wäre wohl der Weg über ein Custom Object, anbei ein Snippet zur Inspiration 🙂
Wenn du einen konkreten Fall hast kannst dich gerne nochmal melden, dann können wir dich gerne unterstützen.
https://docs.microsoft.com/de-de/powershell/scripting/learn/deep-dives/everything-about-pscustomobject?view=powershell-7.1
$ExportFile = “C:\Temp\SQL.txt”
$Object = New-Object PSObject -Property @{
Field1 = $SQLQuery.Field1
Field2 = $SQLQuery.Field2
Field3 = $SQLQuery.Field3
} # // Close Custom Object
$ResultList += $Object
$ResultList | Select-Object Field1,Field2,Field3 | Export-Csv -Path $ExportFile -NoClobber -NoTypeInformation -Encoding UTF8 -Delimiter “;” -Force
Super, vielen Dank. Werde ich ausprobieren.
Lieber Johannes,
danke für die Artikel und Dein Bemühen. Der Code wurde aber nicht per CopyPaste aus einem laufenden System übernommen, denn er funktioniert nicht. Ich weiß, einem geschenkten Gaul ….
Nach einer Stunde habe ich dann endlich gemerkt, dass die Variable “sqlHost” gefüllt, in data source aber “Host” verwendet wird. Danach hatte ich keine Lust mehr.
Hallo Wolfgang,
danke für deine offenen Worte.
Leider ist uns dieser Fehler unterlaufen – aber bereits ausgebessert.
Danke für den Hinweis. Gruß Johannes
Komme leider jetzt erst dazu, zu antworten.
1 Stunde, das ist eine nette Reaktionszeit, Respekt.
Beste Grüße
Wolfgang