需要将现有对象嵌入 PSObject 中

需要将现有对象嵌入 PSObject 中

我有一个模块,它执行“获取”操作并从 VMware 主机返回一些信息。所有返回信息都在 NoteProperty 中。我想在该 PSObject 中添加一个类型,以便我可以将其导入“set”cmdlet 并通过 ValueFromPipelineByPropertyName 继承该属性。

尝试做这样的事:

$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 对象的属性。

我一直在寻找,但无法弄清楚如何将特定对象类型添加到现有的 PSobject 属性中。

谢谢,

答案1

关于如何让 PowerShell 使用特定类型的问题非常简单,因为如果您已经可以通过 NoteProperty 提供提供所需类型的命令的结果,则您无需执行任何操作。

因此,在您的示例中,根据$vmHost结果填充,Get-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; }

如果 $vmHost 变量的类型还不正确,那么您需要在添加 NoteProperty 之前转换/强制类型或运行可获取类型的命令。

希望有所帮助。

相关内容