我想扩展VMware PowerCli cmdlet Get-VM
以在其字段中包含我的值并将其传递给管道。
例如,我希望在对象中看到MyField1
和MyField2
。这可以通过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-Object
cmdlet,但这些都不是:
PS C:\> get-vm -name linux1 | other-cmdlet {$_.MyField1}
$_.MyField
----------
如何真正扩展一个对象,在我的情况VMware.VimAutomation.ViCore.Impl.V1.Inventory.VirtualMachineImpl
中具有一些扩展功能并将这些值传递给管道?
答案 0 :(得分:1)
您可以使用Add-Member
cmdlet。例如:
$VM = get-vm -name linux1
$VM | Add-Member -MemberType NoteProperty -Name MyField1 -Value "#value#"
$VM | Select * | fl
更新:然后使用其他cmdlet的值:
other-cmdlet $($VM | Select -ExpandProperty MyField1)
答案 1 :(得分:1)
Calculated properties可能是在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!
}