我是Powershell的新手,这种行为令我感到难过。
假设我已经创建了一个包含以下信息的哈希表:
$hash= @{
California = 'Sacramento';
Washington = 'Olympia';
Oregon = 'Salem';
Alaska = 'Juneau';
}
$hash
现在我想使用where -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
但我的搜索脚本仍然没有结果。
答案 0 :(得分:1)
要完成工作,您只需要获取Import-Csv
的输出并以这种方式使用它:
$layers = Import-Csv "C:\yourfile.csv" -Header "Key","Value"
$result = @($layers | ? {$_.Key -match 'Cal'})
$result
您无需创建HashTable
。
答案 1 :(得分:1)
因此,在您当前的迭代中,Import-Csv
正在将CSV导入为PSCustomObject
类型。您的Key
/ Value
标题用于在对象上创建属性,每个CSV下都有一个数组,因此您最终得到:
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
要根据此信息构建您自己的哈希表,您需要自己合并:
$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]
}