mercredi 18 décembre 2013

PowerShell et MsSQL

Dans cet article, nous allons voir l’accès aux bases MsSQL avec Windows PowerShell. J'ai choisi de vous présenter ici une fonction qui permet d’exécuter des requêtes sur une base MsSQL. L'exemple suivant montre comment se connecter sur une base MsSQL, et utilisation des instructions Create Table, Insert, Query, Update et Drop Table.

Exemple


Avant d’exécuter le script, notez que j'ai créé au préalable une base de données "Base1".  Les tables et les données peuvent être créé ensuite avec les exemples de requêtes SQL présent dans le script.


 
#Les requêtes SQL en PowerShell.
Function Sql_Query([string] $sqServer, [string] $sqBase, [string] $sqQuery)
 {
   #Etablit la connexion avec la base SQL.
   $Connection = New-Object System.Data.SqlClient.SqlConnection
   $Connection.ConnectionString = "Server = $sqServer; Database = $sqBase; Integrated Security = True"

   #Crée une commande SQL.
   $sqlCmd = New-Object System.Data.SqlClient.SqlCommand
   $sqlCmd.CommandTimeout = 30
   $sqlCmd.CommandText = $sqQuery
   $sqlCmd.Connection = $Connection

   #Exécute et récupère le résultat.
   $DataSet = New-Object System.Data.DataSet
   $Adapter = New-Object System.Data.SqlClient.SqlDataAdapter
   $Adapter.SelectCommand = $sqlCmd
   $Adapter.Fill($DataSet)

   #Ferme la connexion avec la base SQL.
   $Connection.Close()

   #Renvoie le résultat.
   return $DataSet.Tables[0]
 }

#Paramètres de connexion.
$SQLSERVER = "."                #Le "." représente le poste local.
$SQLBASE = "Base1"              #Nom de la base SQL.
$sqlQuery = "SELECT @@VERSION"  #Requête par défaut.

#-------------------------------------------------------------------------#
#Voici la liste de différentes requêtes SQL que vous pouvez essayer.
#Supprimez le # devant la requête SQL que vous souhaitez tester.
#-------------------------------------------------------------------------#
#Créer une table.
#$sqlQuery = "CREATE TABLE [dbo].[Table1]([Colonne1] [nchar](20) NULL, [Colonne2] [nchar](20) NULL) ON [PRIMARY]"
#Ajouter une ligne.
#$SqlQuery = "INSERT INTO [Base1].[dbo].[Table1]([Colonne1],[Colonne2]) VALUES ('Jumbor12','PowerShell')"
#Lire une table.
#$SqlQuery = "select * from [Table1]"
#Lire une ligne.
#$SqlQuery = "select * from [Table1] WHERE [Colonne1] = 'Jumbor12'"
#Modifier une valeur.
#$SqlQuery = "UPDATE [Base1].[dbo].[Table1] SET [Colonne2] = 'PowerShell 2.0' WHERE [Colonne2] = 'PowerShell'"
#Supprimer une ligne.
#$SqlQuery = "DELETE FROM [Base1].[dbo].[Table1] WHERE [Colonne1] = 'Jumbor12'"
#Supprimer une table.
#$sqlQuery = "DROP TABLE [dbo].[Table1]"
#-------------------------------------------------------------------------#

#Affiche la requête exécutée.
Write-Host $sqlQuery

#Exécute la requête.
$rtn = Sql_Query $SQLSERVER $SQLBASE $sqlQuery
Foreach ($raw in $rtn)
 {
   #Ici j'affiche le retour pour les requêtes de lecture de données.
   Try { Write-Host "name :" $raw[0] $raw[1] } catch {}
 }
 Write-Host "Exécution terminé."

#Fin.