2017-05-17 4 views
0

列インデックスの代わりに列名を使用して列から情報にアクセスする方法は、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]) 
} 

をスクリプトはフルーツ(「FruitName」)は罰金と呼ばれるテーブルの2番目の列に格納されたデータを出力しますが、そこにある場合、私は疑問に思います代わりにFruitNameを参照して2番目の列を評価する方法はありますか?

これは私のデータ構造である:

enter image description here

答えて

1

あなたは、列自体から列インデックスを取得することができます。

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

あなたは、フロントまでハッシュテーブル内のすべての列のインデックスをラップすることができインデクサー内で長い表現を避ける:

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

今度は次のように使用できます:

$FruitName = $r[$ci.FruitName] 
+0

これはすばらしいことです!これはまさに私が探していたものです。それは非常に滑らかです。 – user1205746

関連する問題