由于我要处理的某些JSON的结构,这是我发现的奇怪行为。我只是想返回所有属性名称。这是我的JSON:
$x = @"
[
{
"test": [
"item1"
]
},
{
"test2": [
"item2"
]
}
]
"@ | ConvertFrom-Json
您也可以像这样创建对象,这会导致相同的问题:
$x= @()
$x += [pscustomobject]@{
'test' = 'item1'
}
$x += [pscustomobject]@{
'test2' = 'item2'
}
请注意,现在,我可以照常写$x | fl
并获取所有这些信息。
$x | fl
test : item1
test2 : item2
但是,使用Get-Member时,仅包含第一个对象。
$x | Get-Member -MemberType NoteProperty
Name MemberType Definition
---- ---------- ----------
test NoteProperty string test=item1
有人知道这是为什么吗?我无法更改JSON结构。
答案 0 :(得分:3)
Get-Member
查看管道中(每种不同类型的第一项)以确定要使用的属性集。
Out-GridView
和其他Export-CSV
cmdlet都做同样的事情。
这些是PSCustomObject
,与事实无关。这是一个FileInfo
对象的示例:
$files = Get-ChildItem -Path C:\temp -File |
Select-Object -First 2
#Add a property to second item
$files[1] | Add-Member -MemberType NoteProperty -Name Test -Value 'hello world'
#doesn't show Test, because it wasn't in the first item
$files | Get-Member
$files2 = Get-ChildItem -Path C:\temp -File |
Select-Object -First 2
#add property to first item
$files2[0] | Add-Member -MemberType NoteProperty -Name Test -Value 'hello world'
#shows Test, because it was in the first item
$files2 | Get-Member