# encoding: ascii
# api: powershell
# title: ConvertFrom-Hashtable 2
# description: Create PSObjects from hashtables. Supports converting nested hashtables, and joining multiple pipelined hashtables into one object using Join-Object
# version: 0.1
# type: function
# author: Joel Bennett
# license: CC0
# function: ConvertFrom-Hashtable
# x-poshcode-id: 1819
# x-archived: 2016-04-26T12:25:02
# x-published: 2011-05-03T13:57:00
#
# Note that joining hashtables is usually as simple as adding them, and generating objects from them in PowerShell 2 is as simple as New-Object PSObject -Property $Hashtable — you really only need this script if you want to recursively convert nested hashtables.
#
#function ConvertFrom-Hashtable {
[CmdletBinding()]
PARAM(
[Parameter(ValueFromPipeline=$true, Mandatory=$true)]
[HashTable]$hashtable
,
[switch]$Combine
,
[switch]$Recurse
)
BEGIN {
$output = @()
}
PROCESS {
if($recurse) {
$keys = $hashtable.Keys | ForEach-Object { $_ }
Write-Verbose "Recursing $($Keys.Count) keys"
foreach($key in $keys) {
if($hashtable.$key -is [HashTable]) {
$hashtable.$key = ConvertFrom-Hashtable $hashtable.$key -Recurse # -Combine:$combine
}
}
}
if($combine) {
$output += @(New-Object PSObject -Property $hashtable)
Write-Verbose "Combining Output = $($Output.Count) so far"
} else {
New-Object PSObject -Property $hashtable
}
}
END {
if($combine -and $output.Count -gt 1) {
Write-Verbose "Combining $($Output.Count) cached outputs"
$output | Join-Object
} else {
$output
}
}
#}