source/Private/ConvertTo-OrderedHashtable.ps1 (42 lines of code) (raw):
function ConvertTo-OrderedHashtable
{
[CmdletBinding()]
param
(
[Parameter(Mandatory = $true, ValueFromPipeline = $true)]
$InputObject
)
if ($null -eq $InputObject)
{
$output = $null
}
elseif ($InputObject -is [PSCustomObject])
{
$output = [Ordered]@{}
foreach ($property in $InputObject.PSObject.Properties)
{
$propertyValue = ConvertTo-OrderedHashtable -InputObject $property.Value
if ($property.Value -is [System.Collections.IEnumerable] -and $property.Value -isnot [string])
{
$output[$property.Name] = @( $propertyValue )
}
else
{
$output[$property.Name] = $propertyValue
}
}
}
elseif ($InputObject -is [System.Collections.IEnumerable] -and $InputObject -isnot [string])
{
$output = @()
foreach ($object in $InputObject)
{
$output += ConvertTo-OrderedHashtable -InputObject $object
}
}
else
{
$output = $InputObject
}
return $output
}