2016-11-25 42 views
0

我有一個哈希表,我從一個文件中得到密鑰,使用命令:搜索在ConvertFrom-StringData是哈希

[array]$hash= Get-Content -raw '../../file.txt' | ConvertFrom-StringData 

file.txt的是這樣的:

key=value 

它完美,問題是當我嘗試使用$hash.GetEnumerator進行搜索時。

我試圖做這樣的事情:

$hash.GetEnumerator() | where {$_.value -match 'value'} // or with key 

它總是返回空值。從link得到它,試圖使用[email protected]{}然後add創建本地散列,並且它工作起來(就像鏈接中的那個人一樣)。

注意! $hash.GetEnumerator() | Sort-Object Name也適用於我,並返回正確的表格。

你知道如何在我創建的哈希表中搜索(-eq或-match)嗎?

+0

要查找完全匹配還是部分匹配?你想通過鍵或(部分)值來查找值嗎? –

+0

我想查找關鍵字的值,然後將其作爲值發送。 例如: 'function($ hash.GetEnumerator()|其中{$ _ .key -match'something'})' 或者與其他變量無關。問題在於搜索 – igor

回答

0

試試這個

$hash.GetEnumerator() | where {$($_.Value) -match 'value'} 

或類似這樣的

$hash.Keys | % {$($hash[$_]) -eq 'value'} | %{$hash[$_]} 

或更好,你可以改變你的哈希表爲對象名單

$hash.GetEnumerator() | 
    % {New-Object psobject -Property @{Name=$($_.Name); Value=$($_.Value)} } | 
     where Value -match 'value' 
0

您對我的評論的反應要求澄清沒我不會澄清太多,但我會假設你想找到t中某個特定鍵的價值他哈希表。這種查找是hashtables的核心功能。

$ht = @' 
foo=23 
bar=42 
baz=5 
'@ | ConvertFrom-StringData 

$key = 'bar' 
$ht[$key] # returns 42 

如果你真的想上的按鍵模糊匹配你可以用wildcard匹配這樣的更換直接查找:

$partialKey = 'ba*' 
$ht.Keys | Where-Object { 
    $_ -like $partialKey 
} | ForEach-Object { 
    $ht[$_] # returns 42 and 5 
} 

regular expression比賽是這樣的:

$partialKey = '^ba' 
$ht.Keys | Where-Object { 
    $_ -match $partialKey 
} | ForEach-Object { 
    $ht[$_] # returns 42 and 5 
} 

作爲在循環中查找多個鍵的替代方法,您還可以構建一個鍵列表並在單個查找中使用該列表:

$partialKey = 'ba*' 
$keys = $ht.Keys | Where-Object { $_ -like $partialKey } 
$ht[$keys] # returns 42 and 5