powercli

PowerCLI – オブジェクトの変換

vSphere Web Services SDK (SDK) と vSphere PowerCLI (PowerCLI) の関係

SDK は vSphere の基礎となる SOAP API で、VMware の製品のほとんどが利用しています。vSphere Web Client の UI で仮想環境の操作を行う時、VMware Horizon 環境で仮想デスクトップをリコンポーズする時、Site Recovery Manager でテスト フェイルオーバーする時、などなど。

PowerCLI は .Net 版の SDK の上に実装されているコマンド ライン インターフェースになります。そして Get-View メソッドや ExtensionData プロパティを使えば、PowerCLI の CLI から SDK のメソッドやプロパティを実行することが可能です。ところが、PowerCLI は SDK 上に実装されているとは言え、SDK のすべてのメソッド、プロパティの代替が用意されているわけではありません。そのため Get-View や ExtensionData を使ってスクリプトを実装することがままあります。

SDK オブジェクトと PowerCLI オブジェクト

しかしながら、vSphere PowerCLI の範囲を超えて vSphere Web Services SDK の API を使い始めると、オブジェクトが vSphere PowerCLI のオブジェクトなのか vSphere Web Services SDK のオブジェクトなのかを意識する必要があります。

例えば仮想マシンを表すオブジェクトは両者で大きく異なります。まず、仮想マシンの PowerCLI オブジェクトを見てみましょう。

PS C:\Users\Administrator> Get-PowerCLIVersion

PowerCLI Version
----------------
   VMware vSphere PowerCLI 6.3 Release 1 build 3737840
---------------
Component Versions
---------------
   VMware Cloud Infrastructure Suite PowerCLI Component 6.3 build 3709081
   VMWare AutoDeploy PowerCLI Component 6.0 build 3736841
   VMWare ImageBuilder PowerCLI Component 6.0 build 3736841
   VMware vSphere PowerCLI Component 6.3 build 3709081




PS C:\Users\Administrator> Get-VM "vc-l-01sp" | Get-Member


   TypeName: VMware.VimAutomation.ViCore.Impl.V1.VM.UniversalVirtualMachineImpl

Name                    MemberType Definition                                                                                                      
----                    ---------- ----------                                                                                                      
ConvertToVersion        Method     T VersionedObjectInterop.ConvertToVersion[T]()                                                                  
Equals                  Method     bool Equals(System.Object obj)                                                                                  
......

次に、vSphere Web Services SDK のオブジェクトを見てみます。

PS C:\Users\Administrator> Get-VM "vc-l-01sp" | Get-View | Get-Member


   TypeName: VMware.Vim.VirtualMachine

Name                                        MemberType Definition                                                                                                      
----                                        ---------- ----------                                                                                                      
AcquireMksTicket                            Method     VMware.Vim.VirtualMachineMksTicket AcquireMksTicket()                                                           
AcquireTicket                               Method     VMware.Vim.VirtualMachineTicket AcquireTicket(string ticketType)                                                
......

仮想マシンの PowerCLI オブジェクトの型は

  • VMware.VimAutomation.ViCore.Impl.V1.VM.UniversalVirtualMachineImpl

SDK オブジェクトの型は

  • VMware.Vim.VirtualMachine

となり、そのプロパティ、メソッドの種類も大きく異なります。

オブジェクトの変換

PowerCLI オブジェクト => SDK オブジェクト の変換には

  • コマンドレット: Get-View
  • プロパティ: ExtensionData

を使います。昔は Get-View しか手段がなかったのですが、PowerCLI 4.1 (build 264274) から ExtensionData が追加されました。

逆方向の変換、すなわち SDK オブジェクト => PowerCLI オブジェクトの変換には

  • コマンドレット: Get-VIObjectByView

を使います。

以下に変換、逆変換の例を挙げます。

PS C:\Users\Administrator> Get-VM "vc-l-01sp" | Get-View | Get-VIObjectByVIView

Name                 PowerState Num CPUs MemoryGB       
----                 ---------- -------- --------       
vc-l-01sp            PoweredOn  2        8.000          



PS C:\Users\Administrator> 

使い勝手について

SDK は自由度が高いのですが、いかんせん古の設計のためメソッドのパラメーターを用意するのが億劫なこと この上ありません。そして都度都度 変換の必要に迫られるため、スクリプトが長大化しやすく、かつ、可読性が下がります。あくまで緊急的な時に利用し、使用する際も Function に閉じ込めるなど配慮をした方が、1ヶ月後の自分に優しいスクリプトとなります。

安易に SDK に逃げない!! きっと PowerCLI にメソッドがあるはず!! しかし、プロパティだけはどうにもならないのでその際は潔く ExtensionData を使う。

程度がちょうど良いかと思います。

関連記事

  1. vmotion

    vMotion の歴史 (3) – vCenter Server 4.0 ~ 4.1

    前回のエントリでは VirtualCenter 1.0 ~ 2.5 ま…

  2. Tong-Sai@Naka Island, Thailand

    raid-5/6

    Virtual SAN – RAID-5/6 には Witness がないのは何故か

    前回のエントリでは RAID-5/6 の仕組みや動作について説明しまし…

  3. nicolas vibert

    インフラの孤島として

    この記事は Nicolas Vibert 氏のブログ&nbs…

  4. powercli

    Onyx for the Web Client

    Flings と OnyxVMware R&D で開発され…

  5. netapp

    Setting up VMware Virtual Volumes with NetApp VASA…

    はじめにvSphere 6 で追加されたストレージの新機能の一つに…

  6. devbox

    Insight into VMware Photon Controller – devbox 02 …

    はじめにPhoton Controller の Devbox をビ…

コメント

  1. この記事へのコメントはありません。

  1. この記事へのトラックバックはありません。










  1. Tong-Sai@Naka Island, Thailand

    vmware

    vExpert 2016 Award
  2. netapp

    Enjoy extremely fast cloning with NetApp…
  3. vsphere

    備忘録: 真なるクローニングに向けて
  4. ipmi

    Memorandum: Virtual Media Wizard not wor…
  5. network insight

    vRealize Network Insight 3.2 のアプライアンスで b…
PAGE TOP
Translate »