# set the paths that the vmware tools need PATH="/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin" # try do a nice shutdown of VM there is power count_vm_on=0 for vm in `vmware-cmd -l` ; do #echo "VM: " $vm for VMstate in `vmware-cmd "$vm" getstate` ; do #echo $VMstate # If the VM is power ON if [ $VMstate = "on" ] ; then echo " " echo "VM: " $vm echo "State: is on and will now tell it to shut down" echo "Shutting down: " $vm vmware-cmd "$vm" stop trysoft vmwarecmd_exitcode=$(expr $?) if [ $vmwarecmd_exitcode -ne 0 ] ; then echo "exitcode: $vmwarecmd_exitcode so will now turn it off hard" vmware-cmd "$vm" stop hard fi count_vm_on=$count_vm_on+1 sleep 2 # if the VM is power OFF elif [ $VMstate = "off" ] ; then echo " " echo "VM: " $vm echo "State: is off, so i skip it" # if the VM is power suspended elif [ $VMstate = "suspended" ] ; then echo " " echo "VM: " $vm echo "State: is suspended, so i skip it" # if state is getstate or = else printf "" #echo "unknown state: " $VMstate fi done done ######################################################################## # wait for up to 5 min for the VM to shutd # if [ $count_vm_on = 0 ] ; then echo " " echo "All VM is off or suspended" else echo " " vm_time_out=300 count_vm_on=0 echo "Waiting for VMware virtual machines." for (( second=0; second<$vm_time_out; second=second+5 )); do sleep 5 printf "." count_vm_on=0 for vm in `vmware-cmd -l` ; do for VMstate in `vmware-cmd "$vm" getstate` ; do if [ $VMstate = "on" ] ; then count_vm_on=$(expr $count_vm_on + 1) fi done done if [ $count_vm_on = 0 ] ; then #echo "exit for" break fi done #echo $VMstate fi #echo $count_vm_on ##################################################################### # checking if all the VM are off and if not then turn them off for vm in `vmware-cmd -l` ; do #echo "VM: " $vm for VMstate in `vmware-cmd "$vm" getstate` ; do # If the VM is power ON if [ $VMstate = "on" ] ; then echo " " echo "Found this VM: " $vm echo "it is stille on but now i will turn it off" vmware-cmd "$vm" stop hard sleep 2 fi done done ##################################################################### # Will now shutdown the ESX server as all VM are now off echo " " echo "now all VM is down, so will shutdown ESX host now" echo " " shutdown -h now