是否有机会将对象添加为系统对象的属性? 我有这样的事情:
$temp = New-Object System.Object
$temp | Add-Member -MemberType NoteProperty -Name "type" -Value $serverType.physical
$temp | Add-Member -MemberType NoteProperty -Name "id" -Value $item.id
$temp | Add-Member -MemberType NoteProperty -Name "name" -Value $item.name
$temp | Add-Member -MemberType NoteProperty -Name "mainobject" -Value $myobject
当我添加$ myobject时,在变量$ temp.myobject中只有字符串值(我认为那个名字)。缺少所有其他对象属性。
答案 0 :(得分:2)
这是否与您所看到的一样?
PS C:\> $MainObject = New-Object -TypeName System.Object;
PS C:\> $MainObject | Add-Member -MemberType NoteProperty -Name "Column1" -Value 1;
PS C:\> $MainObject | Add-Member -MemberType NoteProperty -Name "Column2" -Value "2";
PS C:\> $MainObject | Add-Member -MemberType NoteProperty -Name "Column3" -Value 3.0;
PS C:\> $MainObject | Add-Member -MemberType NoteProperty -Name "Column4" -Value ([Math]::Sqrt(16));
PS C:\> $MainObject | Format-Table -AutoSize;
Column1 Column2 Column3 Column4
------- ------- ------- -------
1 2 3.0 4
PS C:\> $SubObject = New-Object -TypeName System.Object;
PS C:\> $SubObject | Add-Member -MemberType NoteProperty -Name "SubColumn1" -Value 1;
PS C:\> $SubObject | Add-Member -MemberType NoteProperty -Name "SubColumn2" -Value @(2,22);
PS C:\> $SubObject | Format-Table -AutoSize;
SubColumn1 SubColumn2
---------- ----------
1 {2, 22}
PS C:\> $MainObject | Add-Member -MemberType NoteProperty -Name "Column5" -Value $SubObject;
PS C:\> $MainObject | Format-Table -AutoSize;
Column1 Column2 Column3 Column4 Column5
------- ------- ------- ------- -------
1 2 3.0 4 System.Object
您想知道为什么在那里看到System.Object
?它是一个占位符。您正在制作一个太复杂的对象,无法显示PowerShell的简单表格。在对象内部显示对象并不是一个很好的解决方法。如果它只是一个数组,通常它会正常工作,但有时它只是赢了。这是你必须解决的限制。
您可以尝试这样做:
$MainObject | Select-Object Column1, Column2, Column3, Column4, @{n="Column5";e={ ("<{0}>,<{1}>" -f $_.Column5.SubColumn1, $_.Column5.SubColumn2); }} | Format-Table -AutoSize
但是如果你在那里得到了复杂的物品,它就不会很好:
Column1 Column2 Column3 Column4 Column5
------- ------- ------- ------- -------
1 2 3.0 4 <1>,<System.Object[]>
对象仍然可以正常工作:
PS C:\> $MainObject.Column5.SubColumn2[1]
22
但他们不会自动为你展示。