Use MySQL with Powershell

Bonsoir,

Ca fait quelque temps que je bosse sur un module MySQL pour PowerShell. Il est temps de faire un petit récapitulatif et de vous donner un peu l’eau à la bouche avec ce qu’il est possible de faire.

Tout d’abord, il faut installer le “MySQL .NET connector” afin de disposer des assemblies nécessaire à l’utilisation des libraires MySQL.
Vous pourrez le trouver ici: http://dev.mysql.com/downloads/connector/net/

Pas nécessaire de s’inscire pour le télécharger au passage.

Une fois le client téléchargé et installé, lancez donc votre Powershell ISE préféré et loadons cette assembly.

 

[void][system.reflection.Assembly]::LoadWithPartialName("MySql.Data")

 

 

Jusqu’ici, rien de bien méchant 😉
Ensuite, regardons de plus prêt comment se connecter à un serveur MySQL.

Vous trouverez ici toutes les options disponibles pour les strings de connections à MySQL.
Voici ce que ça donne une fois déclaré en tant que variable.

 

$ConnStr = “server=localhost;uid=root;password=Passw0rd;database=mysql;Port=3306”

 

Il ne reste plus qu’à créer l’objet qui utilisera cette connection.

 

$ObjMysql = New-Object MySql.Data.MySqlClient.MySqlConnection($ConnStr)
$ObjMysql

 

 

mysql1

 

$ObjMysql | Get-Member

 

 

mysql2

On remarquera la présence de la méthode Open… tiens tiens 😉
Ok, tout est en place pour tester la connection (vous aurez évidement changer les credentials pour aller pointer vers votre server MySQL 😉

Utilisons donc cette fameuse méthode Open

 

$ObjMysql.Open()
$ObjMysql

 

 

mysql3

On voit bien que nous sommes connectés au server MySQL.
Maintenant, la base: Exécuter une commande sur le serveur et récupérer le résultat.

Deux notions sont importantes à ce niveau (Tiré du MSDN):

  • Le DataAdapter joue le rôle de pont entre DataSet et une source de données pour la récupération et l’enregistrement de données. ataAdapter fournit un pont en mappant Fill, qui modifie les données de DataSet afin qu’elles correspondent à celles de la source de données, et Update, qui modifie les données de la source de données afin qu’elles correspondent à celles de DataSet. (http://msdn.microsoft.com/fr-fr/library/system.data.common.dataadapter(v=vs.100).aspx)
  • Le DataSet qui est un cache en mémoire des données récupérées d’une source de données, est un composant important de l’architecture ADO.NET. DataSet est constitué d’une collection d’objets DataTable que vous pouvez lier entre eux à l’aide d’objets DataRelation.Vous pouvez également appliquer l’intégrité des données dans le DataSet à l’aide des objets UniqueConstraint et ForeignKeyConstraint.Pour plus d’informations sur l’utilisation d’objets DataSet, consultez Using DataSets in ADO.NET. (http://msdn.microsoft.com/fr-fr/library/system.data.dataset.aspx)

Regardons concrètement comment ça marche.
Tout d’abord créons une requete SQL dans une variable.

 

$req = "SELECT * FROM user"
# bien vérifier qu'on est connecté à MySQL avec des droits root pour exécuter cette requête...

 

 

Ensuite on crée l’objet qui contiendra la commande

 

$SQLCommand = New-Object MySql.Data.MySqlClient.MySqlCommand($req,$ObjMysql)
$SQLCommand

 

 

mysql4

Il faut maintenant créer un DataAdaptater

 

$MySQLDataAdaptater = New-Object MySql.Data.MySqlClient.MySqlDataAdapter($SQLCommand)

 

 

Puis un DataSet

 

$MySQLDataSet = New-Object System.Data.DataSet

 

 

Remplir le DataAdaptater

 

$RecordCount = $MySQLDataAdaptater.Fill($MySQLDataSet)

 

 

Et on affiche le résultat

 

$MySQLDataSet.Tables

 

 

mysql5

Maintenant qu’on a notre résultat tant attendu, plus qu’à fermer la connection 🙂

 

$ObjMysql.close()
$ObjMysql

 

 

mysql6

Voilà, vous pouvez commencer à vous amusez en attendant le module qui va arriver un jour (sisi) qui permettra de faire quasiment toutes les actions d’administration, mais ça égalera pas phpmyadmin, rêvez pas !

Bonne nuit !