2016-03-11 8 views
0

Есть ли возможность добавить объект как свойство системного объекта? у меня есть что-то вроде этого:Свойство объекта как объекта

$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

Ваш код не добавляет свойство 'myobject' к' $ temp', поэтому странно, что '$ temp.myobject' возвращает что-либо вообще. – PetSerAl

+0

В вашем коде есть '$ myobject' и' $ temp.mainobject', но вы говорите о '$ temp.myobject', которого нет в вашем коде. Если я предполагаю, что вы просто набрали '$ temp.myobject' вместо' $ temp.mainobject' по ошибке здесь, однако, тогда ваш код работает для меня. Я не знаю, в чем проблема. –

+0

Что происходит при вводе $ temp.mainobject? – zdan

ответ

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 

Но они не будут автоматически отображаться хорошо для вас.

+0

Большое спасибо! – exo

Смежные вопросы