12 déc. 2011

[snippet] Se connecter a MySQL depuis Powershell

Il est possible d'écrire dans une base de données MySQL depuis un simple script Powershell. Le tout en utilisant la capacité a Powershell d'utiliser les assemblies .Net et MySQL Connector/Net (a télécharger http://dev.mysql.com/downloads/connector/net/).

Vous devez depuis le serveur MySQL autoriser d'être accédé par une autre machine. Pour cela, ouvrez une console MySQL et tapez:
GRANT ALL ON *.* to root@'192.168.1.196' IDENTIFIED BY 'password';
FLUSH PRIVILEGES;

Une fois le connector installé, localisez la DLL MySQL.Data.dll (normalement localisée a C:\Program Files\MySQL\MySQL Connector Net \Binaries\.NET 2.0\MySQL.Data.dll en 5.X ou C:\Program Files\MySQL\MySQL Connector Net \Assemblies\v2.0\MySQL.Data.dll en 6.X

Il faut alors charger l'assemblie dans la session Powershell comme ceci :
[system.reflection.Assembly]::LoadFrom(“C:\Program Files\MySQL\MySQL Connector Net 6.4.4\Assemblies\v2.0\MySQL.Data.dll”)

Puis voici deux petites commandes similaires au PHP:
function mysql_connect([string]$ip,[string]$Login,[string]$Password,[string]$Database) {  
  $dbconnect = New-Object MySql.Data.MySqlClient.MySqlConnection  
  $dbconnect.ConnectionString = “server=$ip;user id=$login;password=$password;database=$database;pooling=false”  
  $dbconnect.Open()  
  $global:db = $dbconnect  
  $dbconnect  
}  
  
function mysql_query([string]$Query,[MySql.Data.MySqlClient.MySqlConnection]$Db) {  
  $sql = New-Object MySql.Data.MySqlClient.MySqlCommand  
  if($db -eq $null) {  
 if($global:db -eq $null) { throw "Pas de connexion spécifiée" }  
 else { $db = $global:db }  
  }  
  if($db.State -ne "Open") {  
 #throw "Connexion spécifié non établie"  
 # on ré-ouvre la connexion car elle peut-être fermée...  
 $db.Open()  
  }  
  $sql.Connection = $db  
  $sql.CommandText = $query  
  $sql.ExecuteNonQuery()  
}

Que l'on utilise comme ceci :
$dbconnect = mysql_connect -Ip 192.168.1.243 -Login "root" -Password "azerty" -Database "stock"
mysql_query -Query "insert into connexion VALUES (NULL, '$mavar_powershell', NOW())"