在 PowerShell 中快速文件到哈希表

Svi*_*ish 3 arrays powershell hashtable hashmap

给定一组键值对(例如通过 ConvertFrom-StringData 读入),是否有一种简化的方法可以将其转换为 Hashtable 或类似的以允许快速查找?即一种不需要我遍历数组并自己手动构建哈希表的方法。

示例数据

10.0.0.1=alice.example.com
10.0.0.2=bob.example.com
Run Code Online (Sandbox Code Playgroud)

示例用法

$names = gc .\data.txt | ConvertFrom-StringData
// $names is now Object[]
$map = ?
// $map should now be Hashtable or equivalent
echo $map['10.0.0.2'] 
// Output should be bob.example.com
Run Code Online (Sandbox Code Playgroud)

基本上我正在寻找的是一个,最好是内置的文件到哈希表的函数。或者一个数组到哈希表的函数。


注意:正如@mjolnior 所解释的,我实际上得到了哈希表,但是一个单值数组。所以这是通过读取文件来解决的-raw,因此不需要任何数组到哈希表的转换。更新了问题标题以匹配它。

mjo*_*nor 5

Convertfrom-Stringdata 确实创建了一个哈希表。

您需要将键值对作为单个多行字符串(而不是字符串数组)提供给它

$map = Get-Content -raw .\data.txt | ConvertFrom-StringData

$map['10.0.0.2']

bob.example.com
Run Code Online (Sandbox Code Playgroud)

当你使用没有 -Raw 开关的 Get-Content 时,你给 ConvertFrom-StringData 一个单行字符串数组,它给你一个单元素哈希表数组:

$map = Get-Content .\data.txt | ConvertFrom-StringData

$map.gettype()

$Map[0].GetType()

$map[0]



IsPublic IsSerial Name                                     BaseType                                                                   
-------- -------- ----                                     --------                                                                   
True     True     Object[]                                 System.Array                                                               
True     True     Hashtable                                System.Object                                                              

Key   : 10.0.0.1
Value : alice.example.com
Name  : 10.0.0.1
Run Code Online (Sandbox Code Playgroud)