Private/ConvertTo-Hashtable.ps1
|
function ConvertTo-Hashtable { <# .SYNOPSIS Converts PSObject to Hashtable .DESCRIPTION Inputs PSObject and converts hashtable by iterating trough properties .PARAMETER Object PSObject .EXAMPLE ConvertTo-Hashtable $InputObject.Disk[0] #> [CmdletBinding()] param( [PSObject]$Object ) $Hashtable = @{} foreach ($Property in ($Object | Get-Member -MemberType *Property -ea Ignore).Name) { if ($null -ne $Object.$Property) { switch ($Object.$Property.GetType()) { { $_.BaseType.Name -eq 'Array' -or $_.FullName -eq 'System.Collections.ArrayList' } { $Arr = @() # SelfInvocation for array foreach ($item in $Object.$Property) { if ($item -is [String] -or $item -is [Hashtable]) { $Arr += $item } elseif ($item -is [System.Enum]) { $Arr += $item | ConvertTo-EnumString } else { $Arr += ConvertTo-Hashtable $item } } $Hashtable.$Property = $Arr } Default { # SelfInvocation for hashtable if ($Object.$Property | Get-Member -MemberType NoteProperty -ea Ignore) { $Hashtable.$Property = ConvertTo-Hashtable $Object.$Property } else { $Hashtable.$Property = $Object.$Property } } } } else { $Hashtable.$Property = $null } } return $Hashtable } |