PowerShell: Read hashtable from a file

Published:

Had a file with the following kind of data.

10.0.0.1=alice.example.com
10.0.0.2=bob.example.com

Wanted to read this in as a hashtable so that I could use it for lookup in a script. Tried doing the following, but ended up with an array of hashtables instead of one hashtable. This is because Get-Content by default actually gives you an array of lines, which are then piped into ConvertFrom-StringData one by one.

PS> Get-Content .\hostnames.txt | ConvertFrom-StringData
PS> $names.GetType()

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

PS> $names[0].GetType()

IsPublic IsSerial Name                          BaseType
-------- -------- ----                          --------
True     True     Hashtable                     System.Object

Turns out it was easy to fix by adding the -raw parameter.

PS> $names = Get-Content -raw .\hostnames.txt | ConvertFrom-StringData
PS> $names.GetType()

IsPublic IsSerial Name                          BaseType
-------- -------- ----                          --------
True     True     Hashtable                     System.Object

PS> $names['10.0.0.1']
alice.example.com