Existe-t-il un moyen d'exécuter une requête arbitraire sur un serveur SQL en utilisant Powershell sur ma machine locale ?
Réponses
Trop de publicités?Il n'existe pas de méthode intégrée "PowerShell" pour exécuter une requête SQL. Si vous avez le Outils SQL Server installés vous obtiendrez un Invoke-SqlCmd cmdlet.
Étant donné que PowerShell est construit sur .NET, vous pouvez utiliser la fonction ADO.NET API pour exécuter vos requêtes.
Pour éviter l'injection SQL avec des paramètres varchar, vous pourriez utiliser
function sqlExecuteRead($connectionString, $sqlCommand, $pars) {
$connection = new-object system.data.SqlClient.SQLConnection($connectionString)
$connection.Open()
$command = new-object system.data.sqlclient.sqlcommand($sqlCommand, $connection)
if ($pars -and $pars.Keys) {
foreach($key in $pars.keys) {
# avoid injection in varchar parameters
$par = $command.Parameters.Add("@$key", [system.data.SqlDbType]::VarChar, 512);
$par.Value = $pars[$key];
}
}
$adapter = New-Object System.Data.sqlclient.sqlDataAdapter $command
$dataset = New-Object System.Data.DataSet
$adapter.Fill($dataset) | Out-Null
$connection.Close()
return $dataset.tables[0].rows
}
$connectionString = "connectionstringHere"
$sql = "select top 10 Message, TimeStamp, Level from dbo.log " +
"where Message = @MSG and Level like @LEVEL"
$pars = @{
MSG = 'this is a test from powershell'
LEVEL = 'aaa%'
};
sqlExecuteRead $connectionString $sql $pars
Peut-être que cette autre question, la deuxième listée pour le titre exact de votre question dans la liste des "questions similaires", pourrait vous aider...
Comment appeler une procédure stockée Sql Server depuis Powershell ?
- Réponses précédentes
- Plus de réponses