Consultar o SQL Server com PowerShell: passo a passo
Automatizar a extração de dados de uma base de dados SQL Server com PowerShell poupa tempo e elimina o trabalho manual repetitivo: com poucas linhas consegue ligar-se ao servidor, correr uma consulta, ver o resultado no ecrã e guardá-lo num ficheiro pronto a reutilizar. Ao contrário de abrir o SQL Server Management Studio e copiar valores à mão, um script é repetível, agendável e fácil de partilhar. Este guia mostra, passo a passo, como consultar o SQL Server com PowerShell através do cmdlet Invoke-Sqlcmd, da ligação inicial até à exportação para CSV. É uma competência prática para quem trabalha com dados e quer criar rotinas fiáveis.
Pré-requisitos
- Windows com PowerShell 5.1 ou PowerShell 7+.
- Uma instância de SQL Server acessível (local ou remota) e permissões de leitura numa base de dados.
- Ligação à Internet para instalar o módulo
SqlServera partir da PowerShell Gallery. - Noções básicas de SQL: a instrução
SELECTé suficiente para começar.
Passo 1: Instalar o módulo SqlServer
O cmdlet Invoke-Sqlcmd faz parte do módulo SqlServer, disponível na PowerShell Gallery. Abra o PowerShell e instale-o apenas para o seu utilizador, sem precisar de privilégios de administrador:
Install-Module -Name SqlServer -Scope CurrentUser
Import-Module SqlServerNa primeira instalação a partir da galeria, o PowerShell pode avisar que o repositório PSGallery não é fidedigno; confirme a operação para continuar. Para confirmar que o cmdlet ficou disponível, execute Get-Command Invoke-Sqlcmd e verifique que devolve o comando sem erros.
Passo 2: Correr a primeira consulta
Com o módulo carregado, já pode ligar-se à instância e executar uma consulta. O exemplo seguinte usa autenticação integrada do Windows (a sua conta atual) e recorre a splatting, uma tabela com os parâmetros, para manter o código legível:
$params = @{
ServerInstance = "localhost"
Database = "AdventureWorks2022"
Query = "SELECT TOP (10) Name, ListPrice FROM Production.Product ORDER BY ListPrice DESC;"
}
$resultado = Invoke-Sqlcmd @params
$resultado | Format-Table -AutoSizeSubstitua ServerInstance pelo nome da sua instância e Database pela base de dados a consultar. O resultado fica guardado na variável $resultado, onde cada linha é um objeto com propriedades: pode filtrá-lo com Where-Object ou escolher colunas com Select-Object sem voltar a consultar o servidor. Guardar os dados num objeto evita idas desnecessárias ao servidor e torna o script mais rápido.
Passo 3: Autenticação SQL e o erro do certificado
Se a instância usar autenticação SQL (utilizador e password) em vez da conta do Windows, indique também o utilizador e a password. As versões recentes do módulo SqlServer cifram a ligação por omissão, por isso, com certificados autoassinados, é comum surgir o erro The certificate chain was issued by an authority that is not trusted. Em ambientes de teste, ative TrustServerCertificate para avançar:
$ligacao = @{
ServerInstance = "servidor.exemplo.local"
Database = "Vendas"
Username = "leitor_bi"
Password = "P@ssw0rd!"
Query = "SELECT COUNT(*) AS Total FROM dbo.Encomendas;"
TrustServerCertificate = $true
}
$resultado = Invoke-Sqlcmd @ligacaoEvite escrever a password diretamente no script. Prefira Get-Credential para a pedir de forma segura, ou um cofre de segredos como o Azure Key Vault em produção.Passo 4: Exportar os resultados para CSV
Como cada linha devolvida é um objeto do PowerShell, exportar para CSV é imediato com Export-Csv. Use -NoTypeInformation para não incluir a linha de metadados e -Encoding UTF8 para preservar acentos e caracteres especiais:
$resultado | Export-Csv -Path "produtos.csv" -NoTypeInformation -Encoding UTF8O ficheiro produtos.csv fica na pasta atual e serve para alimentar um relatório de Power BI, um processo de ETL agendado ou uma simples partilha com colegas que preferem folhas de cálculo.
Verificar o resultado
Para confirmar que tudo correu bem, verifique o número de linhas devolvidas e volte a ler o ficheiro gerado:
"Total: $($resultado.Count)"
Import-Csv "produtos.csv" | Select-Object -First 5Se vir as primeiras linhas com os dados esperados, a consulta e a exportação funcionaram. Se receber um erro de ligação, confirme que a instância está acessível na porta 1433 com Test-NetConnection -ComputerName "servidor" -Port 1433 e reveja o nome do ServerInstance.
Conclusão
Em poucos minutos transformou uma consulta manual num script reutilizável, pronto a agendar no Task Scheduler ou num Azure Automation Runbook para correr sozinho todas as manhãs. A partir daqui, experimente parametrizar a consulta com variáveis, juntar vários resultados num único relatório ou enviar o CSV por email de forma automática. Qual é a consulta que repete com frequência e que gostaria de automatizar a seguir?