PowerShell-Skript für MSSQL

Dieses Skript kann verwendet werden, um automatisch SQL-Dateien, die älter als 20 Minuten sind, in die MSSQL-Datenbank zu importieren. Es ist hilfreich, wenn Sie SQL-Textprotokollierung für Hochleistungskonfigurationen aktivieren. Um dieses Skript auszuführen, müssen Sie es mit der Erweiterung .ps1 speichern und die Ausführung von PowerShell-Skripten für Windows im Gruppenrichtlinien-Editor aktivieren (oder Sie müssen das Skript als Administrator ausführen).

Video 1 - Verwendung des PowerShell-Skripts in einer MSSQL-Datenbank (Video-Tutorial)

Erstellen Sie die folgende MSSQL-Tabelle

CREATE TABLE messagereport
(
    logid int IDENTITY(1,1),
    messageid varchar(64),
    fromconnection varchar(64),
    fromaddress varchar(64),
    requestedconnection varchar(64),
    toconnection varchar(64),
    toaddress varchar(64),
    messagetext varchar(1024),
    route varchar(64),
    datecreated datetime,
    datedeliverytoconnectionsuccess datetime,
    datedeliverytoconnectionfailed datetime,
    deliverytoconnectionreference varchar(256),
    deliverytoconnectionstatusmessage varchar(1024),
    datedeliverytorecipientsuccess datetime,
    datedeliverytorecipientfailed datetime,
    deliverytorecipientstatusmessage varchar(1024),
    status varchar(64)   
)

Der erste Schritt besteht darin, die Tabelle messagereport in der Datenbank zu erstellen. Alle ausgehenden und eingehenden Nachrichten werden in dieser Tabelle gespeichert und entsprechend ihrem Status aktualisiert. Wenn Sie diese Tabelle bereits erstellt haben, können Sie diesen Schritt überspringen. Kopieren Sie das oben stehende CREATE TABLE-Skript und führen Sie es in Ihrer Datenbank aus, wie in Abbildung 1 dargestellt.

Tabelle messagereport erstellen
Abbildung 1 - Tabelle messagereport erstellen

Speichern Sie das folgende PowerShell-Skript als "dbimport.ps1"

Der nächste Schritt besteht darin, die Datei "dbimport.ps1" im Ordner C:\Ozeki zu erstellen, wie in Abbildung 2 gezeigt. Diese Datei enthält das Skript, das periodisch SQL-Abfragen in der Datenbank ausführt.

Skriptdatei erstellen
Abbildung 2 - Skriptdatei erstellen

$ProcessedDir = "C:\Ozeki\Processed"
New-Item -ItemType Directory -Force -Path $ProcessedDir

#Endlosschleife
while (1) {
	#Dateien auflisten, die älter als 20 Minuten sind
	#Stellen Sie sicher, dass die Zeit größer ist als der im Berichtskonfig verwendete Zeitraum
	Get-ChildItem "C:\Ozeki\Reporting_SQL" -Filter *.sql | 
		Where{$_.LastWriteTime -le (Get-Date).AddMinutes(-20)} |
	
	Foreach-Object {
		#Inhalt der Datei in die MSSQL-Datenbank laden
		Write-Output $_.FullName
		$Text = Get-Content -Path $_.FullName
		Invoke-Sqlcmd -ServerInstance MeinComputer\HauptInstanz -Database MeineDatenbank
		-Query "$Text" -Username "MeinBenutzer" -Password "MeinPasswort"

		
		#Die verarbeitete Datei in den Processed-Ordner verschieben
		Move-Item -Path $_.FullName -Destination $ProcessedDir
	}
	
	#5 Sekunden warten
	Start-Sleep -s 5
}

Kopieren Sie das oben stehende PowerShell-Skript und fügen Sie es in die Datei "dbimport.ps1" ein, wie in Abbildung 3 dargestellt.

Skript in die Datei einfügen
Abbildung 3 - Skript in die Datei einfügen

Passen Sie das Skript schließlich an Ihre eigene MSSQL-Datenbank an. Geben Sie im Server-Instanz-Feld den Computer- und Instanznamen der MSSQL-Datenbank an. Geben Sie den Benutzernamen und das Passwort ein, das Sie verwenden möchten, und ersetzen Sie "MeineDatenbank" durch den Namen Ihrer Datenbank (Abbildung 4).

MySQL-Befehl ändern
Abbildung 4 - MySQL-Befehl ändern

Führen Sie das Skript als Administrator aus

powershell -ExecutionPolicy Bypass -File dbimport.ps1

Führen Sie das Skript nun in der PowerShell aus, indem Sie den oben stehenden Befehl ausführen, wie in Abbildung 5 dargestellt.

PowerShell-Skript ausführen
Abbildung 5 - PowerShell-Skript ausführen

Sie können sehen, dass das Skript alle SQL-Dateien, die älter als 20 Minuten sind, im Ordner 'C:\Ozeki\Reporting_SQL' nacheinander ausführt (Abbildung 6).

Skript führt SQL-Abfragen aus
Abbildung 6 - Skript führt SQL-Abfragen aus

Jede SQL-Datei, die das Skript ausgeführt hat, wird in den Processed-Ordner verschoben, damit keine Abfragen verloren gehen (Abbildung 7). Von hier aus können Sie sie manuell löschen, wenn Sie sie nicht mehr benötigen.

SQL-Dateien in den Processed-Ordner verschoben
Abbildung 7 - SQL-Dateien in den Processed-Ordner verschoben

Wenn Sie schließlich in der Datenbank nachsehen, können Sie feststellen, dass alle Nachrichten in die Tabelle messagereport eingefügt wurden, wie in Abbildung 8 gezeigt.

Nachrichten in die Datenbank eingefügt
Abbildung 8 - Nachrichten in die Datenbank eingefügt

More information