There might be occasions that you need to power off VMs from ESXi command line for some reason. knowing how to do it can save you time and effort from dealing with corrupted virtual disks and VMs. For instance an ESXi host loses all network connectivity due to a driver and firmware compatibility issue and you have to reboot the host but the VMs are still running with no network connectivity. In that case it will be safer if you gracefully shutdown the VMs and then put the host in maintenance mode and then reboot the ESXi host. Let’s see how to do it:
First of all you will need to grab Virtual Machines ID by running the below command:
Below command returns the VM’s power state:
vim-cmd vmsvc/power.getstate VMID
Now you can try grcefully shutdown the VM. If the VM doesn’t respond to graceful shutdown in couple of minutes then you can forcefully power it off by the second command:
#For gracefull shutdown:
vim-cmd vmsvc/power.shutdown VMID
#For forcefully powering off the VM:
vim-cmd vmsvc/power.off VMID
The alternative way of doing the power off action is using ESXCLI command:
esxcli vms vm list
esxcli vms vm kill --type=[soft,hard,force] --world-id= WorldNumber
If neither of the above work then you will need to kill the VM process using below commands:
#find the VM World ID
esxcli vm process list
#Kill the VM process
esxcli vm process kill --type=[soft,hard,force] --world-id= WorldNumber
Note You can kill VM process using ps and kill commands similar to “esxcli vm process” if esxcli is not functioning.
Once you power off all you VMs then you can put the ESXi host in maintenance mode and power it off or reboot it using the following command:
#put the host in maintenance mode
esxcli system maintenanceMode set --enable true
#Power off the ESXi host
esxcli system shutdown [poweroff,reboot] --delay "seconds" --reason "description"