¿Hay alguna manera de ejecutar una consulta arbitraria en un servidor SQL utilizando Powershell en mi máquina local?
161
¿Hay alguna manera de ejecutar una consulta arbitraria en un servidor SQL utilizando Powershell en mi máquina local?
Para otros que necesitan hacer esto solo con stock .net y PowerShell (sin herramientas SQL adicionales instaladas), esta es la función que uso:
function Invoke-SQL {
param(
[string] $dataSource = ".\SQLEXPRESS",
[string] $database = "MasterData",
[string] $sqlCommand = $(throw "Please specify a query.")
)
$connectionString = "Data Source=$dataSource; " +
"Integrated Security=SSPI; " +
"Initial Catalog=$database"
$connection = new-object system.data.SqlClient.SQLConnection($connectionString)
$command = new-object system.data.sqlclient.sqlcommand($sqlCommand,$connection)
$connection.Open()
$adapter = New-Object System.Data.sqlclient.sqlDataAdapter $command
$dataset = New-Object System.Data.DataSet
$adapter.Fill($dataSet) | Out-Null
$connection.Close()
$dataSet.Tables
}
He estado usando esto durante tanto tiempo que no sé quién escribió qué partes, pero esto se destiló de los ejemplos de otros, pero se simplificó para ser claro y lo que se necesita sin dependencias o características adicionales.
Utilizo y comparto esto con suficiente frecuencia que lo he convertido en un módulo de script en GitHub para que ahora pueda ir al directorio de módulos y ejecutarlo git clone https://github.com/ChrisMagnuson/InvokeSQL
y, a partir de ese momento, invoke-sql se cargará automáticamente cuando vaya a usarlo (suponiendo estás usando powershell v3 o posterior).
$connection.dispose()
etc. No sé si hace alguna diferenciaPuedes usar el
Invoke-Sqlcmd
cmdlethttp://technet.microsoft.com/en-us/library/cc281720.aspx
fuente
Import-Module "sqlps" -DisableNameChecking
Aquí hay un ejemplo que encontré en este blog .
Presumiblemente, podría sustituir una declaración TSQL diferente donde dice
dbcc freeproccache
.fuente
ExecuteNonQuery()
devuelve cero en caso de éxito, la condición de que el uso que es:if ($cmd.ExecuteNonQuery() -ne 0)
.Esta función devolverá los resultados de una consulta como una matriz de objetos de PowerShell para que pueda usarlos en filtros y acceder a columnas fácilmente:
fuente
DataTable
(ver la respuesta de Adam )?Si desea hacerlo en su máquina local en lugar de hacerlo en el contexto del servidor SQL, usaría lo siguiente. Es lo que usamos en mi empresa.
Simplemente complete las variables $ ServerName , $ DatabaseName y $ Query y estará listo.
No estoy seguro de cómo nos encontramos originalmente esto, pero hay algo muy similar aquí .
fuente
fuente
No hay una forma integrada de "PowerShell" de ejecutar una consulta SQL. Si tiene instaladas las herramientas de SQL Server , obtendrá un cmdlet Invoke-SqlCmd .
Debido a que PowerShell está construido en .NET, puede usar la API ADO.NET para ejecutar sus consultas.
fuente
Para evitar la inyección SQL con parámetros varchar, puede usar
fuente