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).
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.
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.
$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.
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).
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.
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).
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.
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.
More information