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 オブジェクトを見てみましょう。

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

仮想マシンの 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

を使います。

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

使い勝手について

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

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

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

コメントを残す