Powershell skript pro MSSQL

Tento skript lze použít k automatickému importu SQL souborů starších než 20 minut do databáze MSSQL. Je užitečný, pokud povolíte SQL textové logování pro vysokovýkonné konfigurace. Pro spuštění tohoto skriptu jej musíte uložit s příponou .ps1 a povolit spouštění powershell skriptů v editoru skupinových politik Windows (nebo musíte skript spustit jako správce).

Video 1 - Jak používat powershell skript v databázi MSSQL (Video návod)

Vytvořte následující tabulku v 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)   
)

Prvním krokem je vytvoření tabulky messagereport v databázi. Všechny odchozí a příchozí zprávy budou uloženy v této tabulce a aktualizovány podle jejich stavu. Pokud jste tuto tabulku již vytvořili, můžete tento krok přeskočit. Zkopírujte skript pro vytvoření tabulky výše a spusťte jej ve své databázi, jak vidíte na Obrázku 1.

vytvořit tabulku messagereport
Obrázek 1 - Vytvoření tabulky messagereport

Uložte následující powershell skript jako "dbimport.ps1"

Dalším krokem je vytvoření souboru "dbimport.ps1" ve složce C:\Ozeki, jak je znázorněno na Obrázku 2. Tento soubor bude obsahovat skript, který periodicky spouští SQL dotazy v databázi.

vytvořit soubor se skriptem
Obrázek 2 - Vytvoření souboru se skriptem

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

#nekonečná smyčka
while (1) {
	#vypsat soubory starší než 20 minut
	#ujistěte se, že čas je větší než perioda použitá v konfiguraci reportingu
	Get-ChildItem "C:\Ozeki\Reporting_SQL" -Filter *.sql | 
		Where{$_.LastWriteTime -le (Get-Date).AddMinutes(-20)} |
	
	Foreach-Object {
		#načtení obsahu souboru do databáze MSSQL
		Write-Output $_.FullName
		$Text = Get-Content -Path $_.FullName
		Invoke-Sqlcmd -ServerInstance MyComputer\MainInstance -Database MyDatabase
		-Query "$Text" -Username "MyUser" -Password "MyPass"

		
		#přesun zpracovaného souboru do složky Processed
		Move-Item -Path $_.FullName -Destination $ProcessedDir
	}
	
	#čekej 5 sekund
	Start-Sleep -s 5
}

Zkopírujte výše uvedený powershell skript a vložte jej do souboru "dbimport.ps1", jak vidíte na Obrázku 3.

vložit skript do souboru
Obrázek 3 - Vložení skriptu do souboru

Nakonec upravte skript podle vaší vlastní databáze MSSQL. V Server instance definujte název počítače a instance databáze MSSQL. Zadejte uživatelské jméno a heslo, které chcete použít, a nahraďte "Mydatabase" názvem vaší databáze (Obrázek 4).

změnit příkaz MySQL
Obrázek 4 - Změna příkazu MySQL

Spusťte skript jako správce

powershell -ExecutionPolicy Bypass -File dbimport.ps1

Nyní spusťte skript v power shellu spuštěním výše uvedeného příkazu, jak vidíte na Obrázku 5.

spustit powershell skript
Obrázek 5 - Spuštění powershell skriptu

Můžete vidět, že skript spouští všechny SQL soubory starší než 20 minut ve složce 'C:\Ozeki\Reporting_SQL' jeden po druhém (Obrázek 6).

skript spouští SQL dotazy
Obrázek 6 - Skript spouští SQL dotazy

Každý SQL soubor, který skript spustil, je přesunut do složky Processed, aby se neztratily žádné dotazy (Obrázek 7). Odtud je můžete ručně smazat, pokud je již nepotřebujete.

SQL soubory přesunuty do složky Processed
Obrázek 7 - SQL soubory přesunuty do složky Processed

Nakonec, pokud se podíváte do databáze, můžete vidět, že všechny zprávy byly vloženy do tabulky messsagereport, jak ukazuje Obrázek 8.

zprávy vloženy do databáze
Obrázek 8 - Zprávy vloženy do databáze

More information