我有一个“获取”并从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的命令。
希望有所帮助。