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

    intellij

    Photon Controller のコードを Intellij IDEA で開く

    昨日 Photon Controller が公開されましたが、Java…

  3. software-defined storage

    Virtual SAN の HCL を JSON で取得する

    はじめにVMware の Hardware Compatibili…

  4. devbox

    Insight into VMware Photon Controller – devb…

    はじめにこのエントリでは、最新の Photon Controlle…

コメント

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

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










  1. host client

    ESXi と Host Client のバージョンの組み合わせ
  2. powershell

    PowerCLI – PowerShell on Mac
  3. Tong-Sai@Naka Island, Thailand

    install

    vCenter Orchestrator (2) – Install…
  4. vco

    vCenter Orchestrator (1) – Intro
  5. console

    VMware Remote Console 9.0 was just relea…
PAGE TOP
Translate »