对象属性作为对象

时间:2016-03-11 18:40:18

标签: powershell

是否有机会将对象添加为系统对象的属性? 我有这样的事情:

$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中只有字符串值(我认为那个名字)。缺少所有其他对象属性。

1 个答案:

答案 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

但他们不会自动为你展示。