How to access and utilize ESXCLI from PowerCLI
Today I am going to talk about an interesting feature of PowerCLI. Through PowerCLI you can utilize the full functionalities of ESXCLI commands. Question is why would you like to access Esxcli commands from PowerCLI cmdlets. The reason is there are certain tasks which can easily be done using Esxcli cmdlets because there are no simple cmdlets available in PowerCLI for this. For example, if you want to re-signature a vmfs datastore, it is easier to use Esxcli than to use PowerCLI and vSphere API’s. Besides using Esxcli very easily provides access to low level information about esxi server.
To access the Esxcli commands, first we need to connect to an Esxi server directly and then use the Get-EsxCli cmdlet to access the ESXCli commands. I will first connect to a Esxi server.
PS C:> Connect-VIServer esxi1.lab.com -Username root -Password abcxyz
Next we will store the information in a variable $esxinfo.
PS C:> $esxinfo = Get-EsxCli -VMHost Esxi1.lab.com
So we have stored ESX CLI cmdlets in the variable. Now if we check the variable we can get a list of all the cmdlets.
PS C:> $esxinfo
=====================
EsxCli: esxi1.lab.com
Elements:
---------
device
elxnet
esxcli
fcoe
graphics
hardware
iscsi
network
rdma
sched
software
storage
system
vm
vsan
Ok. So good so far. Since we got the list, what to do with it? To dig deeper, we need to query further. For example, if we need to find the information about hardware, we need to query it.
PS C:> $esxinfo.hardware
=======================
EsxCliElement: hardware
Elements:
---------
bootdevice
clock
cpu
ipmi
memory
pci
platform
smartcard
trustedboot
As can be seen from above that we can get information about the listed parameters. For example, if we want to know about the platform we can simply use it with do notation.
PS C:> $esxinfo.hardware.platform
=======================
EsxCliElement: platform
Methods:
--------
PlatformGet get()
We can see that there is only one method get() defined in this parameter. So we can use this to get the information about the platform.
PS C:> $esxinfo.hardware.platform.get()
IPMISupported : false
ProductName : VMware Virtual Platform
SerialNumber : VMware-56 4d a2 7e 02 05 10 2b-77 8b 50 eb bc b8 0b 78
UUID : 0x56 0x4d 0xa2 0x7e 0x2 0x5 0x10 0x2b 0x77 0x8b 0x50 0xeb 0xbc 0xb8 0xb 0x78
VendorName : VMware, Inc.
Likewise, you can use different parameters to get or set many aspects of Esxi servers which you can do from ESX CLI cmdlets, but this time from PowerCLI.