我有一个 PSCustomObject 数组,上面有几个属性。一些属性是整数,一些字符串,还有一些是我推测的字典对象(这些对象是从 Invoke-RestMethod 返回的) 下面是一个例子:
> $items[0]
id : 42
name : Modularize the widget for maximum reuse
priority : {[id, 1], [order, 1], [name, High]}
project : {[id, 136], [name, Wicked Awesome Project]}
最终,我想要做的是“展平”这个结构,以便我可以通过管道传输到 Export-CSV 并保留所有数据。每个属性都将成为一列。例子:
id : 42
name : Modularize the widget for maximum reuse
priority_id : 1
priority_order : order
priority_name : High
project_id : 135
project_name : Wicked Awesome Project
所以,我的想法是枚举属性,如果有任何一个是 Dictionary/HashTable/PSCustomObject 来枚举它的属性并将它们添加到父属性以展平这个结构。
但是,我无法成功推断出某个属性是否是 Dictionary/HashTable/PSCustomObject。我像这样遍历所有属性。
foreach($property in $item.PsObject.Properties)
{
Write-Host $property
Write-Host $property.GetType()
Write-Host "-------------------------------------------------------------"
# if a PSCustomObject let's flatten this out
if ($property -eq [PsCustomObject])
{
Write-Host "This is a PSCustomObject so we can flatten this out"
}
else
{
Write-Host "Use the raw value"
}
}
对于看起来是 PSCustomObject 的属性,这将打印出以下内容。
System.Management.Automation.PSCustomObject project=@{id=135}
System.Management.Automation.PSNoteProperty
-------------------------------------------------------------
但是,我无法有条件地检查这个 ia PSCustomObject。我尝试过的所有条件都属于 else 条件。我尝试用 [Dictionary] 和 [HashTable] 替换 [PSCustomObject]。请注意,检查类型无济于事,因为它们似乎都是 PSNoteProperty。
如何检查一个属性实际上是一个 PSCustomObject 并因此需要展平?