需要在PSObject中embedded一个现有的对象

我有一个“获取”并从VMware主机返回一些信息的模块。 所有的返回信息都在一个NoteProperty中。 我想在PSObject中添加一个types,这样我就可以将它传递给一个“set”cmdlet,并通过ValueFromPipelineByPropertyNameinheritance该属性。

试图做这样的事情:

$obj = new-object PSObject $obj | Add-Member Noteproperty -Name DataStoreName -value 'MYDATASTORE' $obj | Add-Member ??? -Name VmHost -value $vmhost 

一个get-member会看起来像这样:

  TypeName: System.Management.Automation.PSCustomObject Name MemberType Definition ---- ---------- ---------- Equals Method bool Equals(System.Object obj) GetHashCode Method int GetHashCode() GetType Method type GetType() ToString Method string ToString() DataStoreName NoteProperty System.String DataStoreName=MYDATASTORE VmHost ????? VMware.VimAutomation.ViCore.Impl.V1.Inventory.VMHostImpl 

其中,VMware.VimAutomation.ViCore.Impl.V1.Inventory.VMHostImpl表示VMware PowerCli cmdlet中“get-vmhost”的结果。

我希望用户能够访问$ obj.DatastoreName,它只是一个NoteProperty或者更高级的东西,像$ obj.VmHost.ExtensionData.OverallStatus,它是我从Powercli获得的$ vmhost对象的一个​​属性。

我一直在寻找周围,不知道如何添加一个特定的对象types到现有的PSobject属性。

谢谢,

围绕如何让PowerShell使用特定types的问题非常简单,因为如果您已经可以提供使用NoteProperty提供所需types的命令的结果,则不需要执行任何操作。

所以在你的例子中,从Get-VMHost的结果填充$vmHost ,你可以执行以下任一操作:

 $obj = new-object PSObject $obj | Add-Member NoteProperty -Name DataStoreName -value 'MYDATASTORE' $obj | Add-Member NoteProperty -Name VmHost -value $vmhost 

要么

 $obj = New-Object PSObject -Property @{ DataStoreName = 'MYDATASTORE'; VmHost = $vmHost; } 

如果$ vmHostvariables已经不是正确的types,那么您需要转换/转换types,或者在添加NoteProperty之前运行一个可以获取types的命令。

希望有所帮助。