Skip navigation

PowerCLI コマンドで ESXi の設定確認・変更をしたいときに、

esxcli コマンドならできるのに PowerCLI ではコマンドレットが見つからないことがあります。

その場合、Get-EsxCli コマンドレットから esxcli を実行することができます。

 

実行例

 

例として、hv55n1.vmad.local という ESXi に対して Get-EsxCli を実行してみます。

※あらかじめ Connect-VIServer で vCenter もしくは ESXi に接続しておきます。

PowerCLI> Get-VMHost hv55n1* | select Name

 

Name

----

hv55n1.vmad.local ★このESXi に esxcli 実行します。


PowerCLI> Get-VMHost hv55n1* | Get-EsxCli

=========================

EsxCli: hv55n1.vmad.local

 

   Elements:

   --------- ★実行できるコマンドの一覧が表示されます。

   device

   esxcli

   fcoe

   graphics

   hardware

   iscsi

   network

   sched

   software

   storage

   system

   vm

   vsan

 

ためしに、

2通りの書き方で esxcli から ESXi の時間を確認してみます。

同時に実行したわけではないので表示される時間は異なりますが、

書き方が違っても同様の結果が得られます。

 

(例1)

PowerCLI> $e = Get-VMHost hv55n1* | Get-EsxCli

PowerCLI> $e.system.time.get()

2014-03-15T14:45:56Z

(例2)

PowerCLI> Get-VMHost hv55n1* | % {($_ | Get-EsxCli).system.time.get()}

2014-03-15T14:45:59Z


個人的な感覚としては、上記の 例1 の書き方の方が一般的な気がします。

一方、ワンライナーが好きだったり、

esxcli を複数の ESXi に実行したかったりという場合は、

例2 のような書き方の方がコマンドラインを組み立てやすいと思います。


ちなみに、例2 のコマンドライン中の「%」は、

PowerShell では ForEach-Object の別名を表します。

「%」 の代わりに、「ForEach-Object」や「foreach」で置き換えられます。

PS> Get-Alias %,foreach | ft -AutoSize

 

 

CommandType Name    Definition

----------- ----    ----------

Alias       %       ForEach-Object

Alias       foreach ForEach-Object

 

esxcli を複数の ESXi に実行したい場合は、

例2 を応用して、下記のような情報取得もできます。

PowerCLI> Get-VMHost hv55n* | select Name,{($_ | Get-EsxCli).system.time.get()} | ft -AutoSize

 

Name              ($_ | Get-EsxCli).system.time.get()

----              -----------------------------------

hv55n1.vmad.local 2014-03-15T15:15:23Z

hv55n2.vmad.local 2014-03-15T15:15:26Z

hv55n3.vmad.local 2014-03-15T15:15:24Z

hv55n4.vmad.local 2014-03-15T15:15:25Z

 

同様のことを ESXi のコンソールで実行した場合は下記のようになります。

esxcli ではスペース区切りだったところが、Get-EsxCli だと ドット( . ) 区切りになります。

また、コマンドラインの最後の単語(メソッドに相当する)は、Get-EsxCli では「()」が付きます。

※今回であれば、esxcli の「get」が、Get-EsxCli だと「get()」 になります。

~ # vmware -vl

VMware ESXi 5.5.0 build-1331820

VMware ESXi 5.5.0 GA

~ # esxcli system time get

2014-03-15T15:15:32Z

 

Get-EsxCli での esxcli 使用方法の調査について

 

esxcli と同様に、コマンドラインを途中の単語まで入力して実行することで、

サブコマンドの有無や、必要な引数についての情報がわかります。

ただ、esxcli をコンソールで実行した時のヘルプよりは読みにくいかもしれません。

PowerCLI> $e.system.time

 

===================

EsxCliElement: time

 

   Methods:

   --------

   string get()

   boolean set(long day, long hour, long min, long month, long sec, long year)

 

PowerCLI> $e.system.time.set

 

TypeNameOfValue     : VMware.VimAutomation.ViCore.Util10Ps.EsxCliExtensionMethod

OverloadDefinitions : {boolean set(long day, long hour, long min, long month, long sec, long year)}

MemberType          : CodeMethod

Value               : boolean set(long day, long hour, long min, long month, long sec, long year)

Name                : set

IsInstance          : True

 

ためしに、上記を参考にして ESXi の時刻設定を変更してみました。

ただしコマンドの反映時間に数秒かかることがあるので、

厳密な時間設定にはあまり向かないかもしれません。

※実作業で時間を合わせる場合は これとは別に NTP サーバを参照させるはず・・・

PowerCLI> $e = Get-VMHost hv55n1* | Get-EsxCli

PowerCLI> $e.system.time.get()

2014-03-15T14:56:45Z

PowerCLI> $e.system.time.set(14,10,15,3,0,2014)

true

PowerCLI> $e.system.time.get()

2014-03-14T10:15:04Z ★時刻が変更された。

 

現在の最新 PowerCLI は、PowerCLI 5.5 R2 です。

VMware vSphere PowerCLI 5.5 Release 2 Release Notes

https://www.vmware.com/support/developer/PowerCLI/PowerCLI55R2/powercli55r2-releasenotes.html

 

リリースノートからもわかるように、PowerCLI はバージョンアップするたびに

できることが増えているため、Get-EsxCli を使う機会は

今後、減っていくのではないかと思います。

 

ただ、「普段 PowerCLI スクリプトを実行しているWindows から

どうしても esxcli を実行したくなった」といった場合には、

Get-EsxCli を使用すれば vSphere CLI (esxcli.exe が含まれる)を

追加インストールしなくても済みそうです。

 

以上、PowerCLI から esxcli を実行する方法についてでした。