通过PowerShell脚本使用MySQL控制台

时间:2016-10-21 10:15:26

标签: mysql powershell

我必须编写一个需要使用mysql.exe控制台并执行一些查询的PowerShell脚本。我开始了:

$mysqlC = 'C:\Users\I16A1\Downloads\mysql\bin\mysql.exe'
$arg1 = '-u asset -ptest testasset'
& $mysqlC $arg1

show databases;

如您所见,在设置控制台放置和连接参数后,我使用调用操作符(&)来运行MySQL控制台。

一切都很好,MySQL控制台正在运行,但调用运算符之后的行没有运行,如show databases;

问题是我希望我的PowerShell脚本能够自行完成所有事情。

有人知道这样做的方法吗?也许不一样?

1 个答案:

答案 0 :(得分:2)

您尝试做的事情无法发挥作用,因为在您退出show databases;之前,您的代码无法访问mysql.exe。从脚本中使用mysql.exe的常用方法是使用每个查询运行可执行文件:

$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 '...'
...

使用splatting提供常用参数。

通常,您还会添加参数-B--batch,非交互式执行,无花哨的输出格式)和-N--skip-column-names,不要&# 39; t显示输出中的列标题)以获得更多"易消化的"输出如下:

information_schema
mysql
performance_schema
test

而不是像这样得到默认输出,这需要从表中解析数据以进行进一步处理:

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

话虽如此,比使用命令行客户端更好的方法是使用.Net Connector,例如像这样:

$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

这样你得到的输出就是实际的对象而不是字符串。