Mysql
 sql >> Base de données >  >> RDS >> Mysql

Utiliser la console MySQL via un script PowerShell

Ce que vous essayez de faire ne fonctionnera pas, car votre code n'atteindra pas les bases de données show databases; jusqu'à ce que vous quittiez mysql.exe . La manière habituelle d'utiliser mysql.exe d'un script est de lancer l'exécutable avec chaque requête :

$db   = 'testasset'
$user = 'asset'
$pass = 'test'

$mysql  = 'C:\Users\I16A1\Downloads\mysql\bin\mysql.exe'
$params = '-u', $user, '-p', $pass, $db

& $mysql @params -e 'SHOW DATABASES'
& $mysql @params -e '...'
...

Utilisez éclabousser pour fournir les paramètres communs.

Normalement, vous ajouteriez également les paramètres -B (--batch , exécution non interactive, pas de formatage de sortie fantaisiste) et -N (--skip-column-names , n'affichez pas les titres des colonnes dans la sortie) pour obtenir une sortie plus "digeste" comme celle-ci :

information_schema
mysql
performance_schema
test

au lieu d'obtenir une sortie par défaut comme celle-ci, cela nécessiterait d'analyser les données de la table pour un traitement ultérieur :

+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
+--------------------+

Cela dit, une bien meilleure approche que de travailler avec le client en ligne de commande consisterait à utiliser le .Net Connecteur , par exemple. comme ceci :

$server = 'localhost'
$db     = 'testasset'
$user   = 'asset'
$pass   = 'test'

$cs = "server=$server;user id=$user;password=$pass;database=$db;pooling=false"

[void][Reflection.Assembly]::LoadWithPartialName('MySQL.Data')

$cn = New-Object MySql.Data.MySqlClient.MySqlConnection
$cn.ConnectionString = $cs
$cn.Open()

$cmd= New-Object MySql.Data.MySqlClient.MySqlCommand
$cmd.Connection  = $cn
$cmd.CommandText = 'SHOW DATABASES'
$reader = $cmd.ExecuteReader()

$tbl = New-Object Data.DataTable
$tbl.Load($reader)
$reader.Close()
$cn.Close()

$tbl | Format-Table -AutoSize

De cette façon, la sortie que vous obtiendrez sera des objets réels au lieu de chaînes.