我有一个INI文件,我将一部分打印为Hashtable。我可以获取哈希表的每个名称和值作为数组吗? 当我打印哈希表时,这是我的INI文件。
Name Value
---- -----
P1 ABN,ABB,ABY
S2 AKS,AKE
AS ABM,AC8,AKH
JP ABJ,ACF
RU ACB
Function Location
{
$FilePath = "C:\Users\xx\Documents\loc.ini"
$section = "RegionMap"
$store = "C:\Users\xx\Documents"
$input_file = $FilePath
$ini_file = @{}
Get-Content $input_file | ForEach-Object {
$_.Trim()
} | Where-Object {
$_ -notmatch '^(;|$)'
} | ForEach-Object {
if ($_ -match '^\[.*\]$') {
$section = $_ -replace '\[|\]'
$ini_file[$section] = @{}
} else {
$key, $value = $_ -split '\s*=\s*', 2
$ini_file[$section][$key] = $value
}
}
$Get_1 = $ini_file.($section)
}
return Location
array[0] = P1 ABN,ABB,ABY
array[1] = S2 AKS,AKE
答案 0 :(得分:0)
您还可以使用列表使用索引获取项目。这是示例:
$ini_file = @{} # your hastable ... $list = New-Object Collections.Generic.List[String] # List $ini_file.Add("one",1); $ini_file.Add("two",2); $ini_file.Add("three",3); foreach( $k in $ini_file.Keys ) { $list.Add("$k `t $($ini_file[$k])") } $list[0]
输出将是:
一个1
答案 1 :(得分:0)
如注释中所述,尚不清楚您是否期望包含对象(键和值)或仅包含字符串的数组。
如果要枚举条目并保留名称/值对,则可以考虑简单地使用GetEnumerator
方法并将其转换为数组(通过将其嵌入@(...)
):
$Array = @($HashTable.GetEnumerator())
$Array[2].Name
AS
$Array[2].Value
ABM,AC8,AKH
如果您实际上在寻找一个字符串,则可以轻松地将结果数组中的名称/值对动态地连接起来:
$Array | ForEach-Object {"$($_.Name)`t$($_.Value)"}
P1 ABN,ABB,ABY
JP BJ,ACF
AS ABM,AC8,AKH
S2 AKS,AKE
RU ACB
此外,您仍然可以使用Where-Object
cmdlet搜索数组,例如:
$Array | Where-Object {$_.Name -eq 'AS'}
Name Value
---- -----
AS ABM,AC8,AKH