O que você está tentando fazer não funcionará, porque seu código não chegará aos
show databases;
até você sair de mysql.exe
. A maneira usual de usar mysql.exe
de um script é executar o executável com cada consulta:$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 '...'
...
Use splatting para fornecer os parâmetros comuns.
Normalmente você também adicionaria os parâmetros
-B
(--batch
, execução não interativa, sem formatação de saída sofisticada) e -N
(--skip-column-names
, não mostre os títulos das colunas na saída) para obter uma saída mais "digerível" como esta:information_schema mysql performance_schema test
em vez de obter a saída padrão como esta, isso exigiria analisar os dados da tabela para processamento adicional:
+--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | test | +--------------------+
Com isso dito, uma abordagem muito melhor do que trabalhar com o cliente de linha de comando seria usar o .Net Conector , por exemplo. assim:
$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
Dessa forma, a saída que você obtém será objetos reais em vez de strings.