Powershell 对象属性作为对象

Powershell 对象属性作为对象,powershell,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 N

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

$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
$MainObject | Select-Object Column1, Column2, Column3, Column4, @{n="Column5";e={ ("<{0}>,<{1}>" -f $_.Column5.SubColumn1, $_.Column5.SubColumn2); }} | Format-Table -AutoSize

当我添加$myobject时,变量$temp.myobject中只有字符串值(我认为是这个名称)。缺少所有其他对象属性。

这是否与您看到的类似

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的简单表无法显示。对于在对象中显示对象,实际上没有一个好的解决方法。如果它只是一个数组,通常它工作得很好,但有时却不行。这是一个你必须克服的限制

您可以尝试这样做:

$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
$MainObject | Select-Object Column1, Column2, Column3, Column4, @{n="Column5";e={ ("<{0}>,<{1}>" -f $_.Column5.SubColumn1, $_.Column5.SubColumn2); }} | Format-Table -AutoSize

但它们不会自动为您显示得很好。

这与您看到的情况类似吗

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的简单表无法显示。对于在对象中显示对象,实际上没有一个好的解决方法。如果它只是一个数组,通常它工作得很好,但有时却不行。这是一个你必须克服的限制

您可以尝试这样做:

$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
$MainObject | Select-Object Column1, Column2, Column3, Column4, @{n="Column5";e={ ("<{0}>,<{1}>" -f $_.Column5.SubColumn1, $_.Column5.SubColumn2); }} | Format-Table -AutoSize

但是它们不会自动为您显示得很好。

您的代码没有将
myobject
属性添加到
$temp
,因此,
$temp.myobject
返回任何内容是很奇怪的。您的代码有
$myobject
$temp.main对象
,但您谈论的是
$temp.myobject
,这在你的代码中是不存在的。但是,如果我假设您在这里错误地键入了
$temp.myobject
而不是
$temp.mainobject
,那么您的代码对我适用。我不确定这里的问题是什么。键入$temp.mainobject时会发生什么?仅返回字符串object(对象名称)。如果对象是diskiinfo,则获取磁盘名称。如果对象是虚拟机,则获取虚拟机的名称。我是说$temp.main对象偏离了航线。仍然没有返回可用的内容。我觉得必须有另一个-MemberType(不是NoteProperty,而是All或其他什么)?您的代码没有将
myobject
属性添加到
$temp
,因此,
$temp.myobject
返回任何内容是很奇怪的。您的代码有
$myobject
$temp.main对象
,但是您谈论的是
$temp.myobject
,它不存在于您的代码中。但是,如果我假设您在这里错误地键入了
$temp.myobject
而不是
$temp.mainobject
,那么您的代码对我适用。我不确定这里的问题是什么。键入$temp.mainobject时会发生什么?仅返回字符串object(对象名称)。如果对象是diskiinfo,则获取磁盘名称。如果对象是虚拟机,则获取虚拟机的名称。我是说$temp.main对象偏离了航线。仍然没有返回可用的内容。我认为必须有另一个成员类型(不是NoteProperty,而是All或其他)?