2016-01-12 6 views
0

Я хотел бы расширить командлет VMware PowerCli 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 Командлет, но это ничего:

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

Как я могу по-настоящему расширяет объект, в моем случае VMware.VimAutomation.ViCore.Impl.V1.Inventory.VirtualMachineImpl иметь некоторые расширенные возможности и передать эти значения трубить?

+0

Я забыл добавить, что MyField1 и MyField2 не являются статическими, но содержат значения из pscmdlet, который я написал – Cowabunga

ответ

1

Вы можете использовать командлет Add-Member. Например:

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

$VM | Select * | fl 

Update: затем, используя значение для другого командлета:

other-cmdlet $($VM | Select -ExpandProperty MyField1) 
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! 
} 
Смежные вопросы