177 votes

Comment exécuter une requête SQL Server à partir de PowerShell ?

Existe-t-il un moyen d'exécuter une requête arbitraire sur un serveur SQL en utilisant Powershell sur ma machine locale ?

13voto

dinesh vishe Points 1309
Invoke-Sqlcmd -Query "sp_who" -ServerInstance . -QueryTimeout 3

12voto

Aaron Jensen Points 5170

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.

1voto

Piero Points 194

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

-2voto

Cylindric Points 3244

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 ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X