コードがshowdatabase;
に到達しないため、実行しようとしていることは機能しません。 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 '...'
...
スプラッティング を使用します 共通のパラメータを提供するため。
通常は、パラメータ -B
も追加します (-バッチコード> 、非対話型実行、派手な出力フォーマットなし)および
-N
(-skip-column-names
、次のような「消化しやすい」出力を取得するには、出力に列タイトルを表示しないでください:
information_schema mysql performance_schema test
このようなデフォルトの出力を取得する代わりに、さらに処理するためにテーブルからデータを解析する必要があります。
+--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | test | +--------------------+
そうは言っても、コマンドラインクライアントで作業するよりもはるかに優れたアプローチは、.Netを使用することです。コネクタ 、例:このように:
$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
そうすれば、得られる出力は文字列ではなく実際のオブジェクトになります。