Tempo de leitura: 2 minutos
Queries no SQL com Powershell
Olá a pessoal,
Hoje vamos ver como fazer uma consulta no banco SQL usando classes .NET. Isso permite que vocês possam automatizar a extração de algum relatório para CSV usando apenas o Powershell e em seguida trabalhar essa massa de dados da forma que desejarem
Separei em 4 passos para facilitar neste caso.
1º: Variáveis, parâmetros e a query em si, pela minha experiencia, devem estar em variáveis, para a conexão processar um objeto do tipo string, dessa forma fica mais fácil evitar bugs no script.
#Set Query Date Variables
$datestart= (Get-Date).AddDays(-1).ToString(“yyyy-M-dd 00:00:00”)
$dateend= (Get-Date).AddDays(-1).ToString(“yyyy-M-dd 23:59:59”)
[string]$query=”select * from Dates where Initiateddate between ‘$datestart’ and ‘$dateend'”
$filename= (Get-Date).AddDays(-1).ToString(“yyyyMMdd”)
2º: Conexão, vamos criar uma nova conexão usando a Classe System.Data.SqlClient.SqlConnection, a documentação completa esta acessível no MSDN. Após criar o objeto definimos a string de conexão especificando Servidor, Base, Usuário e senha, caso queira usar autenticação integrada use: Integrated Security=True no lugar do usuario e senha, em seguida chamamos o método .Open() para abrir a conexão com a base.
#Set connection strings
$connection=New-Object-TypeName System.Data.SqlClient.SqlConnection
$connection.ConnectionString =”server=DatabaseServer;database=GUIDO_DB;uid=guido;password=1234″
$connection.Open()
3º: Comando: Vamos chamar o metodo .CreateCommand() para definir a propriedade CommandText, que é o comando a ser enviado e vamos dizer que ele será a variável query, que definimos anteriormente. Após isso iremos enviar o comando e armazenar o resultado na variável $result.
#creating and running the query
$command=$connection.CreateCommand()
$command.CommandText =$query
$result=$command.ExecuteReader()
4º: Resultado, iremos armazenar o resultado dentro da variável $table, que seria um objeto do tipo System.DataTable, com o método .Load()vamos carregar os resultados armazenados dentro da variável, feito isso basta fechar a conexão com o banco.
#store result in the Table variable
$table=New-Object-TypeName System.Data.DataTable
$table.Load($result)
$connection.Close()
Agora podemos simplesmente tratar o resultado como qualquer outro objeto de Powershell, no exemplo abaixo estou enviando para um arquivo CSV.
#store result in the Table variable
$table|Export-Csv-Path”$env:USERPROFILEDesktop$filename.csv”-NoClobber-NoTypeInformation-Encoding UTF8 –UseCulture
Duvidas ou sugestões? Comente!
Até a proxima!
Você pode encontrar esse artigo em: https://guidooliveira.com/2016/04/13/queries-no-sql-com-powershell/