Consultar SQL Server con PowerShell: paso a paso
Automatizar la extracción de datos de una base de datos SQL Server con PowerShell ahorra tiempo y elimina el trabajo manual repetitivo: en pocas líneas puede conectarse al servidor, ejecutar una consulta, ver el resultado en pantalla y guardarlo en un archivo reutilizable. A diferencia de abrir SQL Server Management Studio y copiar valores a mano, un script es repetible, programable y fácil de compartir. Esta guía muestra, paso a paso, cómo consultar SQL Server con PowerShell usando el cmdlet Invoke-Sqlcmd, desde la conexión inicial hasta la exportación a CSV. Es una habilidad práctica para quien trabaja con datos y quiere rutinas fiables.
Requisitos previos
- Windows con PowerShell 5.1 o PowerShell 7+.
- Una instancia de SQL Server accesible (local o remota) y permisos de lectura en una base de datos.
- Conexión a Internet para instalar el módulo
SqlServerdesde la PowerShell Gallery. - Nociones básicas de SQL: la instrucción
SELECTes suficiente para empezar.
Paso 1: Instalar el módulo SqlServer
El cmdlet Invoke-Sqlcmd forma parte del módulo SqlServer, disponible en la PowerShell Gallery. Abra PowerShell e instálelo solo para su usuario, sin necesidad de privilegios de administrador:
Install-Module -Name SqlServer -Scope CurrentUser
Import-Module SqlServerEn la primera instalación desde la galería, PowerShell puede avisar de que el repositorio PSGallery no es de confianza; confirme la operación para continuar. Para comprobar que el cmdlet está disponible, ejecute Get-Command Invoke-Sqlcmd y verifique que devuelve el comando sin errores.
Paso 2: Ejecutar la primera consulta
Con el módulo cargado, ya puede conectarse a la instancia y ejecutar una consulta. El siguiente ejemplo usa autenticación integrada de Windows (su cuenta actual) y recurre al splatting, una tabla con los parámetros, para mantener el código legible:
$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 -AutoSizeSustituya ServerInstance por el nombre de su instancia y Database por la base de datos a consultar. El resultado se guarda en la variable $resultado, donde cada fila es un objeto con propiedades: puede filtrarlo con Where-Object o elegir columnas con Select-Object sin volver a consultar el servidor. Guardar los datos en un objeto evita viajes innecesarios al servidor y hace el script más rápido.
Paso 3: Autenticación SQL y el error del certificado
Si la instancia usa autenticación SQL (usuario y contraseña) en lugar de la cuenta de Windows, indique también el usuario y la contraseña. Las versiones recientes del módulo SqlServer cifran la conexión de forma predeterminada, por lo que, con certificados autofirmados, es habitual que aparezca el error The certificate chain was issued by an authority that is not trusted. En entornos de prueba, active TrustServerCertificate para continuar:
$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 escribir la contraseña directamente en el script. Prefiera Get-Credential para solicitarla de forma segura, o un almacén de secretos como Azure Key Vault en producción.Paso 4: Exportar los resultados a CSV
Como cada fila devuelta es un objeto de PowerShell, exportar a CSV es inmediato con Export-Csv. Use -NoTypeInformation para omitir la línea de metadatos y -Encoding UTF8 para conservar acentos y caracteres especiales:
$resultado | Export-Csv -Path "produtos.csv" -NoTypeInformation -Encoding UTF8El archivo produtos.csv queda en la carpeta actual y sirve para alimentar un informe de Power BI, un proceso de ETL programado o un simple intercambio con colegas que prefieren hojas de cálculo.
Verificar el resultado
Para confirmar que todo salió bien, compruebe el número de filas devueltas y vuelva a leer el archivo generado:
"Total: $($resultado.Count)"
Import-Csv "produtos.csv" | Select-Object -First 5Si ve las primeras filas con los datos esperados, la consulta y la exportación funcionaron. Si recibe un error de conexión, confirme que la instancia es accesible en el puerto 1433 con Test-NetConnection -ComputerName "servidor" -Port 1433 y revise el nombre de ServerInstance.
Conclusión
En pocos minutos convirtió una consulta manual en un script reutilizable, listo para programar en el Task Scheduler o en un Azure Automation Runbook para que se ejecute solo cada mañana. A partir de aquí, pruebe a parametrizar la consulta con variables, combinar varios resultados en un único informe o enviar el CSV por correo de forma automática. ¿Qué consulta repite a menudo y le gustaría automatizar a continuación?