Script Powershell MSSQL

Este script pode ser usado para importar automaticamente arquivos SQL com mais de 20 minutos para o banco de dados MSSQL. É útil se você habilitar o registro de texto SQL para configurações de alto desempenho. Para executar este script, você deve salvá-lo com a extensão .ps1 e habilitar a execução de scripts PowerShell no Windows através do Editor de Política de Grupo (ou você deve executar o script como Administrador).

Vídeo 1 - Como usar o script PowerShell em um banco de dados MSSQL (Tutorial em vídeo)

Crie a seguinte tabela 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)   
)

O primeiro passo é criar a tabela messagereport no banco de dados. Todas as mensagens enviadas e recebidas serão armazenadas nesta tabela e atualizadas de acordo com seu status. Se você já criou esta tabela, pode pular esta etapa. Copie o script de criação da tabela acima e execute-o no seu banco de dados, como pode ser visto na Figura 1.

criar tabela messagereport
Figura 1 - Criar tabela messagereport

Salve o seguinte script PowerShell como "dbimport.ps1"

O próximo passo é criar o arquivo "dbimport.ps1" na pasta C:\Ozeki, como mostrado na Figura 2. Este arquivo conterá o script que executa consultas SQL periodicamente no banco de dados.

criar o arquivo de script
Figura 2 - Criar o arquivo de script

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

#loop infinito
while (1) {
	#listar arquivos com mais de 20 minutos
	#certifique-se de que o tempo seja maior que o período usado na configuração de relatório
	Get-ChildItem "C:\Ozeki\Reporting_SQL" -Filter *.sql | 
		Where{$_.LastWriteTime -le (Get-Date).AddMinutes(-20)} |
	
	Foreach-Object {
		#carregar o conteúdo do arquivo no banco de dados MSSQL
		Write-Output $_.FullName
		$Text = Get-Content -Path $_.FullName
		Invoke-Sqlcmd -ServerInstance MyComputer\MainInstance -Database MyDatabase
		-Query "$Text" -Username "MyUser" -Password "MyPass"

		
		#mover o arquivo processado para o diretório de processados
		Move-Item -Path $_.FullName -Destination $ProcessedDir
	}
	
	#aguardar 5 segundos
	Start-Sleep -s 5
}

Copie o script PowerShell acima e cole-o no arquivo "dbimport.ps1", como pode ser visto na Figura 3.

colar o script no arquivo
Figura 3 - Colar o script no arquivo

Por fim, modifique o script de acordo com seu próprio banco de dados MSSQL. Na instância do servidor, defina o nome do computador e da instância do banco de dados MSSQL. Insira o nome de usuário e senha que deseja usar e substitua "Mydatabase" pelo nome do seu banco de dados (Figura 4).

alterar comando mysql
Figura 4 - Alterar comando MySQL

Execute o script como administrador

powershell -ExecutionPolicy Bypass -File dbimport.ps1

Agora execute o script no PowerShell executando o comando acima, como pode ser visto na Figura 5.

executar script powershell
Figura 5 - Executar script PowerShell

Você pode ver que o script executa todos os arquivos SQL com mais de 20 minutos na pasta 'C:\Ozeki\Reporting_SQL' um por um (Figura 6).

script executa consultas sql
Figura 6 - Script executa consultas SQL

Cada arquivo SQL que o script executou é movido para a pasta Processed, para que nenhuma consulta seja perdida (Figura 7). A partir daqui, você pode excluí-los manualmente se não precisar mais deles.

arquivos sql movidos para pasta processada
Figura 7 - Arquivos SQL movidos para pasta processada

Finalmente, se você verificar o banco de dados, poderá ver que todas as mensagens foram inseridas na tabela messagereport, como mostra a Figura 8.

mensagens inseridas no banco de dados
Figura 8 - Mensagens inseridas no banco de dados

More information