2016-03-28 3 views
0
$Query1 = "INSERT INTO answers (gid,Key1,key2,key3,key4,key5) VALUES ($gid,'$key1','$key2','$key3','$key4','$key5');" 

function Invoke-MySql { 
    param($Query) 

    $MySQLAdminUserName = 'root' 
    $MySQLAdminPassword = <password> 
    $MySQLDatabase = <username> 
    $MySQLHost = 'localhost' 
    $ConnectionString = "server=" + $MySQLHost + ";port=3306;uid=" + 
         $MySQLAdminUserName + ";pwd=" + $MySQLAdminPassword + 
         ";database=" + $MySQLDatabase 
    Write-Log "Trying to connect MySql" 0 

    try { 
    [void][System.Reflection.Assembly]::LoadWithPartialName("MySql.Data") 
    $Connection = New-Object MySql.Data.MySqlClient.MySqlConnection 
    $Connection.ConnectionString = $ConnectionString 
    $Connection.Open() 


    $Command = New-Object MySql.Data.MySqlClient.MySqlCommand($Query, $Connection) 
    $DataAdapter = New-Object MySql.Data.MySqlClient.MySqlDataAdapter($Command) 
    $DataSet = New-Object System.Data.DataSet 
    $RecordCount = $dataAdapter.Fill($dataSet, "data") 
    $DataSet.Tables[0] | ft -AutoSize 
    Write-Log "Querying the table with following query: $Query" 0 
    } catch { 
    Write-Log "ERROR : Unable to run query : $query `n$Error[0]" 2 
    } finally { 
    $Connection.Close() 
    Write-Log "MySql connection closed" 0 
    } 
} 

$Result1 = Invoke-MySql -Query $Query1 

ВЫХОД:запросов к БД MySQL

PS D:\MYSQL> D:\MYSQL\MySql_Insert&Query.ps1 

    gid key1  key2 key3 key4 key5 
    --- ----  ---- ---- ---- ---- 
31657 c1  c2  c3  c4 c5 
31667 b1  b2  b3  b4 b5 
112322 aa  bb  cc  dd ee 
212322 aa  bb  cc  dd ee 
212982 aa  bb  cc  dd ee 
215982 aa  bb  cc  dd ee 
215987 aa  bb  cc  dd ee 
315987 aa  bb  cc  dd ee

Так что это выход. Я получил результаты от MySQL, но теперь хочу отфильтровать результаты, например, когда я хочу извлечь только одно значение, например, key3 из gid = 2122322.

+0

Вы хотите отфильтровать переменную $ Result1? Вы можете сделать '$ Result1 | Where-Object {$ _. Gid -eq '2122322'} 'или напишите новый запрос для выбора с аналогичными критериями. – Taylor

ответ

1

Ваша функция возвращает форматированный вывод вместо самой таблицы:

$DataSet.Tables[0] | ft -AutoSize 

Снимите | ft -AutoSize и вы будете иметь возможность работать с фактическими данными таблицы:

$Result1 = Invoke-MySql -Query $Query1 | 
      Where-Object { $_.gid -eq 2122322 } | 
      Select-Object -Expand key3 

Format-* командлеты для форматирования данных, когда они представлены пользователю. Никогда не используйте данные, которые должны подвергаться дальнейшей обработке (в основном, никогда не использовать их внутри функции).

Смежные вопросы