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