none
Свойста и методы у свойства :) RRS feed

  • Вопрос

  • Попробую объяснить что мне непонятно чтобы вы мне могли помочь :)

    Предположим есть некий командлет возвращающий объект определенного класса предположим это 

    Get-VM zabbix, делаю get-member и получаю все свойства и методы доступные в классе Microsoft.HyperV.PowerShell.VirtualMachine

    Предположим беру свойство networkadapters и выполняю

    (Get-VM zabbix).networkadapters | get-member и тут становится понятно что это вовсе не свойство, а объект класса Microsoft.HyperV.PowerShell.VMNetworkAdapter

    Правильно ли я понимаю что get внутри свойства networkadapters просто возращает объект класса vmnetworkadapter?

    Вопрос возник не из пустого места, меня просто смущают записи типа:

    (Get-VM zabbix).Networkadapters.VlanSetting.Operationmode

    Получает здесь три вложенных через свойство объекта и одно свойство с текстом.

    Правильно я все понимаю?


Ответы

  • Get-VM возвращает тип Microsoft.HyperV.PowerShell.VirtualMachine , базовый тип от которого он наследует методы и свойства
    Microsoft.HyperV.PowerShell.VirtualMachineBase. В VirtualMachineBase определенно свойство NetworkAdapters с типом List<VMNetworkAdapter>(т.к. адаптеров может быть больше 1).

    return this.Settings.NetworkAdapters; - возвращает объекты типа List<VMNetworkAdapter>

    public abstract class VirtualMachineBase : VirtualizationObject
    {
     public List<VMNetworkAdapter> NetworkAdapters
        {
          get
          {
            return this.Settings.NetworkAdapters;
          }
        }
    }
     
    public class VirtualMachine : VirtualMachineBase
    {
    }


    NetworkAdapters с типом VMNetworkAdapter, базовый тип VMNetworkAdapterBase в котором определенно свойство VlanSetting с типом VMNetworkAdapterVlanSetting.

    return adapterVlanSetting; - возвращает объект типа VMNetworkAdapterVlanSetting

    public abstract class VMNetworkAdapterBase : VMResource
    {
     public VMNetworkAdapterVlanSetting VlanSetting
        {
          get
          {
            WmiNetworkAdapterVlanSetting vlanSetting = this.WmiNetworkAdapter.VlanSetting;
            VMNetworkAdapterVlanSetting adapterVlanSetting = new VMNetworkAdapterVlanSetting(this);
            .................
            return adapterVlanSetting;
          }
    }
     
     
    public class VMNetworkAdapter : VMNetworkAdapterBase
    {
    }


    OperationMode  возвращает одно из значений перечисления VMNetworkAdapterVlanMode.

    PS > [decimal[]][enum]::GetValues([Microsoft.HyperV.PowerShell.VMNetworkAdapterVlanMode])
    0
    1
    2
    3

    PS > [int][Microsoft.HyperV.PowerShell.VMNetworkAdapterVlanMode]::Access
    1

    public enum VMNetworkAdapterVlanMode
    {
        Untagged,
        Access,
        Trunk,
        Private,
    }
     
    public class VMNetworkAdapterVlanSetting
    {
        public VMNetworkAdapterVlanMode OperationMode { get; internal set; }
    }

    Отвечающий

Все ответы

  • Get-VM возвращает тип Microsoft.HyperV.PowerShell.VirtualMachine , базовый тип от которого он наследует методы и свойства
    Microsoft.HyperV.PowerShell.VirtualMachineBase. В VirtualMachineBase определенно свойство NetworkAdapters с типом List<VMNetworkAdapter>(т.к. адаптеров может быть больше 1).

    return this.Settings.NetworkAdapters; - возвращает объекты типа List<VMNetworkAdapter>

    public abstract class VirtualMachineBase : VirtualizationObject
    {
     public List<VMNetworkAdapter> NetworkAdapters
        {
          get
          {
            return this.Settings.NetworkAdapters;
          }
        }
    }
     
    public class VirtualMachine : VirtualMachineBase
    {
    }


    NetworkAdapters с типом VMNetworkAdapter, базовый тип VMNetworkAdapterBase в котором определенно свойство VlanSetting с типом VMNetworkAdapterVlanSetting.

    return adapterVlanSetting; - возвращает объект типа VMNetworkAdapterVlanSetting

    public abstract class VMNetworkAdapterBase : VMResource
    {
     public VMNetworkAdapterVlanSetting VlanSetting
        {
          get
          {
            WmiNetworkAdapterVlanSetting vlanSetting = this.WmiNetworkAdapter.VlanSetting;
            VMNetworkAdapterVlanSetting adapterVlanSetting = new VMNetworkAdapterVlanSetting(this);
            .................
            return adapterVlanSetting;
          }
    }
     
     
    public class VMNetworkAdapter : VMNetworkAdapterBase
    {
    }


    OperationMode  возвращает одно из значений перечисления VMNetworkAdapterVlanMode.

    PS > [decimal[]][enum]::GetValues([Microsoft.HyperV.PowerShell.VMNetworkAdapterVlanMode])
    0
    1
    2
    3

    PS > [int][Microsoft.HyperV.PowerShell.VMNetworkAdapterVlanMode]::Access
    1

    public enum VMNetworkAdapterVlanMode
    {
        Untagged,
        Access,
        Trunk,
        Private,
    }
     
    public class VMNetworkAdapterVlanSetting
    {
        public VMNetworkAdapterVlanMode OperationMode { get; internal set; }
    }

    Отвечающий