我有一个哈希表,我从一个文件,使用的命令:
[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得到它,尝试使用$hash=@{}
然后add
创建本地哈希,并且它起作用(就像链接中的人一样)。
请注意! $hash.GetEnumerator() | Sort-Object Name
也适合我,并返回正确的桌子。
您是否知道如何在我创建的哈希表中搜索(-eq或-match)?
答案 0 :(得分: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'
答案 1 :(得分:0)
您对我的评论要求澄清的回复没有说明太多,但我会假设您想要在哈希表中找到特定键的值。这种查找是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