Skrypt Powershell MSSQL

Ten skrypt może być używany do automatycznego importowania plików SQL starszych niż 20 minut do bazy danych MSSQL. Jest pomocny, jeśli włączysz logowanie tekstowe SQL dla konfiguracji wysokiej wydajności. Aby wykonać ten skrypt, musisz zapisać go z rozszerzeniem .ps1 i włączyć wykonywanie skryptów power shell dla systemu Windows w edytorze zasad grupy (lub musisz uruchomić skrypt jako Administrator).

Wideo 1 - Jak używać skryptu powershell w bazie danych MSSQL (Samouczek wideo)

Utwórz następującą tabelę MSSQL

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)   
)

Pierwszym krokiem jest utworzenie tabeli messagereport w bazie danych. Wszystkie wychodzące i przychodzące wiadomości będą przechowywane w tej tabeli i aktualizowane zgodnie z ich statusem. Jeśli już utworzyłeś tę tabelę, możesz pominąć ten krok. Skopiuj skrypt tworzenia tabeli powyżej i wykonaj go w swojej bazie danych, jak widać na Rysunku 1.

utwórz tabelę messagereport
Rysunek 1 - Utwórz tabelę messagereport

Zapisz następujący skrypt powershell jako "dbimport.ps1"

Następnym krokiem jest utworzenie pliku "dbimport.ps1" w folderze C:\Ozeki, jak pokazano na Rysunku 2. Ten plik będzie zawierał skrypt, który okresowo wykonuje zapytania SQL w bazie danych.

utwórz plik skryptu
Rysunek 2 - Utwórz plik skryptu

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

#nieskończona pętla
while (1) {
	#lista plików starszych niż 20 minut
	#upewnij się, że czas jest większy niż okres używany w konfiguracji raportowania
	Get-ChildItem "C:\Ozeki\Reporting_SQL" -Filter *.sql | 
		Where{$_.LastWriteTime -le (Get-Date).AddMinutes(-20)} |
	
	Foreach-Object {
		#załaduj zawartość pliku do bazy danych mssql
		Write-Output $_.FullName
		$Text = Get-Content -Path $_.FullName
		Invoke-Sqlcmd -ServerInstance MyComputer\MainInstance -Database MyDatabase
		-Query "$Text" -Username "MyUser" -Password "MyPass"

		
		#przenieś przetworzony plik do katalogu processed
		Move-Item -Path $_.FullName -Destination $ProcessedDir
	}
	
	#czekaj 5 sekund
	Start-Sleep -s 5
}

Skopiuj powyższy skrypt powershell i wklej go do pliku "dbimport.ps1", jak widać na Rysunku 3.

wklej skrypt do pliku
Rysunek 3 - Wklej skrypt do pliku

Na koniec zmodyfikuj skrypt zgodnie z własną bazą danych MSSQL. W Server instance zdefiniuj nazwę komputera i instancji bazy danych MSSQL. Wprowadź nazwę użytkownika i hasło, których chcesz użyć, i zastąp "Mydatabase" nazwą swojej bazy danych (Rysunek 4).

zmień polecenie mysql
Rysunek 4 - Zmień polecenie MySQL

Wykonaj skrypt jako administrator

powershell -ExecutionPolicy Bypass -File dbimport.ps1

Teraz wykonaj skrypt w power shell, uruchamiając powyższe polecenie, jak widać na Rysunku 5.

uruchom skrypt powershell
Rysunek 5 - Uruchom skrypt powershell

Możesz zobaczyć, że skrypt wykonuje wszystkie pliki SQL starsze niż 20 minut w folderze 'C:\Ozeki\Reporting_SQL' jeden po drugim (Rysunek 6).

skrypt wykonuje zapytania sql
Rysunek 6 - Skrypt wykonuje zapytania SQL

Każdy plik SQL, który skrypt wykonał, jest przenoszony do folderu Processed, aby żadne zapytania nie zostały utracone (Rysunek 7). Stąd możesz je usunąć ręcznie, jeśli nie są już potrzebne.

pliki sql przeniesione do folderu processed
Rysunek 7 - Pliki SQL przeniesione do folderu processed

Na koniec, jeśli spojrzysz do bazy danych, możesz zobaczyć, że wszystkie wiadomości zostały wstawione do tabeli messsagereport, jak pokazuje Rysunek 8.

wiadomości wstawione do bazy danych
Rysunek 8 - Wiadomości wstawione do bazy danych

More information