0

我想扩展 VMware PowerCli cmdletGet-VM以在其字段中包含我的值并通过管道传递它。

例如,我想在对象中看到MyField1MyField2。这可以通过 ps1xml 文件来实现。

PS C:\> get-vm -name linux1 | fl *


MyField1                : #value1#
MyField2                : #value2#
PowerState              : PoweredOff
Version                 : v8
Description             :
Notes                   :
Guest                   : suse11sp3-3:SUSE Linux Enterprise 11 (64-bit)
...
...

当我尝试使用管道中的字段时,我什么也没得到。

PS C:\> get-vm -name linux1 | other-cmdlet {$_.MyField1}

例如,在这里我将使用Select-Objectcmdlet,但这些都不是:

PS C:\> get-vm -name linux1 | other-cmdlet {$_.MyField1}
    $_.MyField
    ----------

我怎样才能真正扩展一个对象,在我的情况下VMware.VimAutomation.ViCore.Impl.V1.Inventory.VirtualMachineImpl具有一些扩展功能并将这些值传递给管道?

4

2 回答 2

1

计算属性可能是在 PowerShell 中向对象添加自定义属性的最常用方法:

Get-Vm -Name linux1 |
  Select-Object *, @{n='MyField1';e={Some-Cmdlet ...}},
                @{n='MyField2';e={Other-Cmdlet ...}}

Add-Member另一种选择是使用@ST8Z6FR57ABE6A8RE9UF建议:

Get-Vm -Name linux1 | ForEach-Object {
  $_ | Add-Member -MemberType NoteProperty -Name MyField1 -Value (Some-Cmdlet ...)
  $_ | Add-Member -MemberType NoteProperty -Name MyField2 -Value (Other-Cmdlet ...)
  $_   # this line is required to actually output the modified object!
}
于 2016-01-12T23:50:47.417 回答
1

您可以使用Add-Membercmdlet。例如:

$VM = get-vm -name linux1
$VM | Add-Member -MemberType NoteProperty -Name MyField1 -Value "#value#"

$VM | Select * | fl

更新:然后使用其他 cmdlet 的值:

other-cmdlet $($VM | Select -ExpandProperty MyField1)
于 2016-01-12T21:39:45.507 回答