Loading a PowerShell hashtable from a file?

(I figured it out while putting together a repro)

PS> $content = ( Get-Content .\foo.pson | Out-String )
PS> $data = ( Invoke-Expression $content )

Get-Content returns an array with the lines in the file; the Out-String is used to join them together.

Invoke-Expression then runs the script, and the result is captured. This is open to injection attacks, but that's OK in my specific case.

Or, if you prefer your PowerShell terse:

PS> $data = gc .\foo.pson | Out-String | iex

(I can't find a shorter form of Out-String)


I've used ConvertFrom-StringData. If you want to use this approach you'll need to change the way you store key/value pairs with each on its own line and no quotes:

#Contents of test.txt
X = x
Y = y

get-content .\test.txt | ConvertFrom-StringData

Name                           Value
----                           -----
X                              x
Y                              y

ConvertFrom-StringData is a built-in cmdlet. I created corresponding ConvertTo-StringData function available here http://poshcode.org/1986

Tags:

Powershell