如何在PowerShell中将嵌套的哈希表转换为PSObjects

时间:2019-11-01 21:02:39

标签: powershell

如果您的哈希表包含嵌套的哈希表,如何将其递归转换为PsObject?

@{
    Foo = @{
        Bar = @{
            Key = 'Value'
            Test = 1
        }
    }
}

结果应为

$_.Foo.Bar.Key = 'Value'
$_.Foo.Bar.Test = 1

3 个答案:

答案 0 :(得分:0)

一种方法是创建一个递归函数:

function ConvertTo-PsObject {
    param (
        [hashtable] $Value
    )

    foreach ( $key in $Value.Keys | Where-Object { $Value[$_].GetType() -eq @{}.GetType() } ) {
        $Value[$key] = ConvertTo-PsObject $Value[$key]
    }

    New-Object PSObject -Property $Value | Write-Output
}

答案 1 :(得分:0)

将其投射到[PsCustomObject]

$a = [PsCustomObject]@{
    Foo = @{
        Bar = @{
            Key = 'Value'
            Test = 1
        }
    }
}

$a.Foo.Bar.Key   # --> "Value"
$a.Foo.Bar.Test  # --> 1

答案 2 :(得分:0)

目前尚未提及的另一种方法是使用 New-Object PSObject。

$a = @{
    Foo = @{
        Bar = @{
            Key = 'Value'
            Test = 1
        }
    }
}
$b = New-Object -Type PSObject -Property $a

这样做可以使其在 Format-Table 中正常工作,也可能在其他地方也能正常工作。