2017-12-11 7 views
1

私はPowershellを初めて使用しています。Powershell:インポートされたハッシュテーブルを検索できません

のは、私は次の情報をハッシュテーブルを作成したとしましょう:

$hash= @{ 
California = 'Sacramento'; 
Washington = 'Olympia'; 
Oregon = 'Salem'; 
Alaska = 'Juneau'; 
} 
$hash 

は今、私は-matchステートメントを使用して特定のキーを検索したい:

$result = @($layers.getEnumerator() | ? {$_.key -match 'Cal'}) 
$result 

これは、と返します鍵はカリフォルニア、価値はサクラメント。すべてが必要なように働いています。

さて、代わりにテーブルのためのキーと値を入力すると、の私は、CSVファイルを使用してハッシュテーブルにインポートしたいとしましょう:ここ

California,Sacramento 
Washington,Olympia 
Oregon,Salem 
Alaska,Junea 

は、私はCSVをインポートするために作成された私のコードです

Import-Csv C:\Users\hgordon\Desktop\Maps_to_search\junk.csv -Header "Key","Value" 
$layers = @{} 
Foreach ($key in $keys) { 
    $layers[$key] = $csv 
} 

私の問題は、上記の検索文を実行すると何も返されないということです。

インポートされたハッシュテーブルで検索が動作しないのはなぜですか? import文で変更する必要があるものはありますか?インポートされたハッシュテーブルと手動で入力されたハッシュテーブルとの違いは何ですか?

ありがとうございます!

編集:

$t = Import-Csv -Path C:\Users\hgordon\Desktop\Maps_to_search\junk.csv -Header "Key","Value" 
$HashTable = @{} 
foreach($r in $t) 
{ 
    #Write-Host $r.column1 $r.column2 
    $HashTable[$r.Key] = $r.Value 
} 
$HashTable 

が、私はまだかかわらず、私の検索スクリプトから何の結果を得ていない:それをより明確にするために、次のように私は私のインポートスクリプトを編集しました。仕事を得るために

+1

'$ keys'と' $ csv'は何ですか? – 4c74356b41

+2

'Import-Csv'はハッシュテーブルではない' PSCustomObject'型を返します。 – TheIncorrigible1

+0

ファイルからレイヤーを作成するために使用したコードは何もしません。 'Import-Csv'の出力を使うだけで十分です。 –

答えて

1

、あなただけのImport-Csvの出力を取得し、それをこのように使用する必要があります。

$layers = Import-Csv "C:\yourfile.csv" -Header "Key","Value" 
$result = @($layers | ? {$_.Key -match 'Cal'}) 
$result 

あなたはHashTableを作成する必要はありません。

+0

何らかの理由で結果を 'HashTable'に変換したい場合は、' $ hash = @ {};を使うことができます。 $ layers | $ hash。getEnumerator()...を使用する必要があります。 –

1

したがって現在の繰り返しでは、Import-CsvはCSVをPSCustomObjectタイプとしてインポートしています。このことから、独自のハッシュテーブルを構築するには

key  value 
---  ----- 
California Sacramento 
Washington Olympia 
Oregon  Salem 
Alaska  Junea 

TypeName: System.Management.Automation.PSCustomObject 

Name  MemberType Definition 
----  ---------- ---------- 
Equals  Method  bool Equals(System.Object obj) 
GetHashCode Method  int GetHashCode() 
GetType  Method  type GetType() 
ToString Method  string ToString() 
key   NoteProperty string key=California 
value  NoteProperty string value=Sacramento 

:あなたのKey/ValueヘッダはCSVの各下列でオブジェクトのプロパティを作成するために使用されているので、あなたは、で終わります情報を自分でマージする必要があります:

$HT = @{} 
$Csv = Import-Csv ... -Header 'Keys','Values' 

For ($i = 0; $i -lt $Csv.Keys.Count; $i++) 
{ 
    ## Here we're using array-accessors 
    $HT[$Csv.Keys[$i]] = $Csv.Values[$i] 
    #alternative 
    #$HT.($Csv.Keys[$i]) = $Csv.Values[$i] 
} 
関連する問題