Zugriff auf relationale Datenbanken in PowerShell via ADO.NET
Mit ADO.NET bietet das .NET-Framework eine Sammlung von Klassen für den Zugriff auf relationale Datenbanken an. Vorhandene Datenprovider wie z. B. OleDB oder Odbc ermöglichen dabei die Arbeit mit verschiedensten relationalen Datenbanken - von lokalen Microsoft Access Datenbanken und Excel-Spreadsheets über Microsoft SQL Server bis hin zu MySQL und Oracle Datenbanken. Da PowerShell den Zugriff auf .NET-Klassen ermöglicht, kann ADO.NET auch über PowerShell angesprochen werden.
In diesem Blogbeitrag stelle ich das von mir entwickelte PowerShell Modul PowerADO.NET [1] resp. das darin enthaltene Cmdlet Invoke-SqlQuery vor, welches das Ausführen von SQL Queries gegen von ADO.NET unterstützte Datenbanken ermöglicht und somit eine rudimentäre, fragmentarische PowerShell Schnittstelle für den Zugriff auf relationale Datenbanken über ADO.NET darstellen soll.
Konfiguration
Für den Verbindungsaufbau und das anschließende Ausführen der SQL Queries werden zwei Informationen benötigt, die dem Cmdlet über Parameter mitgeteilt werden können. Dabei handelt es sich zum einen um den entsprechenden Datenprovider und zum anderen um die Verbindungsinformationen der Datenbank. Aktuell werden die folgenden standardmäßig in ADO.NET angebotenen Datenprovider aus dem System.Data Namespace unterstützt:
SqlClient
OleDb
Odbc
OracleClient
EntityClient
SqlCeClient
Die Verbindungsinformationen werden in Form eines typischen ConnectionStrings übergeben. Eine Referenz verschiedener ConnectionStrings für verschiedene Datenbanktechnologien kann unter [2] gefunden werden.
Queries
Die SQL Queries können dem Cmdlet über die Pipeline als Strings übergeben werden. Diese werden dann sequentiell verarbeitet. Ein String kann wiederum mehrere Queries enthalten, in dem diese durch ein Semikolon separiert angegeben werden. Handelt es sich um ein SELECT-Query, werden die angeforderten Daten aus der Datenbank in Form von PowerShell-Objekten zurückgegeben, was eine einfache Weiterverarbeitung ermöglicht. Alle anderen Anfragen werden ohne Rückgabewert ausgeführt. Mithilfe des -Verbose Parameters kann jedoch ausgegeben werden, wie viele Reihen von dem Query betroffen waren.
Beispiele
Im Folgenden wird beispielhaft eine lokale Microsoft Access 2013 Datenbank Database.accdb mit einer Tabelle Customers und den Spalten Id, FirstName, LastName und Age verwendet, die wie in Bild 1 zu sehen befüllt sind. Für den Zugriff auf diese ergibt sich der ConnectionString „Provider=Microsoft.ACE.OLEDB.12.0;Data Source=.\Database.accdb;“ und der Datenprovider OleDb.
Beispiel 1 – Einzelabfrage
Ausgabe aller Reihen und Spalten aus der Datenbank (Bild 2).
'SELECT * FROM Customers' | Invoke-SqlQuery -Provider OleDb -ConnectionString "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=.\Database.accdb;"
Beispiel 2 – Mehrfachabfrage
Einfügen einer neuen Reihe mit anschließender Ausgabe aller Reihen und Spalten der Datenbank (Bild 3).
"INSERT INTO Customers VALUES (3, 'Jeff', 'Doe', 16)", 'SELECT * FROM Customers ORDER BY ID' | Invoke-SqlQuery -Provider OleDb -ConnectionString "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=.\Database.accdb;" -Verbose
Beispiel 3 – Mehrfachabfrage (Alternative Syntax)
Einfügen einer neuen Reihe mit anschließender Ausgabe aller Reihen und Spalten der Datenbank (Bild 4).
Die Queries werden hier alternativ innerhalb eines Strings durch ein Semikolon separiert übergeben, statt des vollen Namens des Cmdlets wird der eingebaute Alias query benutzt und die übergebenen Parameter anhand ihrer Positionen ermittelt.
"INSERT INTO Customers VALUES (4, 'Jenny', 'Doe', 8); SELECT * FROM Customers ORDER BY ID" | query OleDb "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=.\Database.accdb;" -Verbose
Download
Das Modul mit dem enthaltenen Cmdlet wird zum Download in der PowerShell Gallery [1] bereitgestellt, kann aber auch unter folgenden Links entweder als .txt oder .psm1 Datei direkt heruntergeladen werden:
PowerADO.NET.txt
PowerADO.NET.psm1
[1] https://www.powershellgallery.com/packages/PowerADO.NET/1.0.0.0
MEHR BLOG-KATEGORIEN
- ASP.NET
- Active Directory
- Administration Tools
- Allgemein
- Backup
- ChatBots
- Configuration Manager
- DNS
- Data Protection Manager
- Deployment
- Endpoint Protection
- Exchange Server
- Gruppenrichtlinien
- Hyper-V
- Intune
- Konferenz
- Künstliche Intelligenz
- Linux
- Microsoft Office
- Microsoft Teams
- Office 365
- Office Web App Server
- Powershell
- Remote Desktop Server
- Remote Server
- SQL Server
- Sharepoint Server
- Sicherheit
- System Center
- Training
- Verschlüsselung
- Virtual Machine Manager
- Visual Studio
- WSUS
- Windows 10
- Windows 8
- Windows Azure
- Windows Client
- Windows Server
- Windows Server 2012
- Windows Server 2012R2
- Windows Server 2016
- Windows Server 2019
- Windows Server 2022
- Zertifikate