आप जो करने का प्रयास कर रहे हैं वह काम नहीं करेगा, क्योंकि आपका कोड 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 '...'
...
स्प्लैटिंग का उपयोग करें सामान्य पैरामीटर प्रदान करने के लिए।
आम तौर पर आप पैरामीटर भी जोड़ेंगे -B
(--batch
, गैर-संवादात्मक निष्पादन, कोई फैंसी आउटपुट स्वरूपण नहीं) और -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
इस तरह आपको जो आउटपुट मिलेगा वह स्ट्रिंग्स के बजाय वास्तविक ऑब्जेक्ट होगा।