按名称而不是列索引评估数据表的列

时间:2017-05-17 19:14:26

标签: powershell

在powershell中,有没有办法通过列名而不是列索引来访问列中的信息?

更具体地说,我有以下powershell脚本:

$SQLQuery = "select * from fruits"
$server   = $env:COMPUTERNAME
$Database = "Test"
$myTable  = "Fruits"
$Datatable = New-Object System.Data.DataTable
$Connection = New-Object System.Data.SQLClient.SQLConnection
$Connection.ConnectionString = "server='$Server';database='$Database';trusted_connection=true;"
$Connection.Open()
$Command = New-Object System.Data.SQLClient.SQLCommand
$Command.Connection = $Connection
$Command.CommandText = $SQLQuery
$Reader = $Command.ExecuteReader()
$Datatable.Load($Reader)
$Connection.Close()

foreach ($r in $Datatable.rows)
{
      Write-Host $($r[1])
}

脚本打印存储在名为Fruits(&#34; FruitName&#34;)的表的第二列中的数据很好,但我想知道是否有办法通过引用FruitName来评估第二列?< / p>

这是我的数据结构:

enter image description here

1 个答案:

答案 0 :(得分:1)

您可以从列本身获取列索引:

$FruitNameIndex = $Datatable.Columns['FruitName'].Ordinal
$FruitName = $r[$FruitNameIndex]

您可以将所有列索引预先包装在哈希表中,以避免在索引器中使用长表达式:

$ci = $Datatable.Columns |ForEach-Object {$t = @{}} {$t[$_.ColumnName] = $_.Ordinal} {return $t}

现在您可以像这样使用它:

$FruitName = $r[$ci.FruitName]