VMware Cloud Community
mdamda
Enthusiast
Enthusiast

Command

I am new to vmware, I want to learn the command lines.

To manage vcenter we use PowerCLI which is a software to be installed and we can manage vcenter and esxi hosts using this powercli

To manage esxi hosts we can also use SSH client putty. Am i right? Wht else we have more.

I want to shutdown all virtual machines by login to esxi console, Please provide me the command and how to run on the esxi console.

12 Replies
jpsider
Expert
Expert

‌im not sure I understand your question Completely.

yes, you can use SSH if that is enabled on the Esx host. I don't recommend this.

i Do recommend powercli.

do you want to power off the vm's or shutdown the vm's?

0 Kudos
mdamda
Enthusiast
Enthusiast

Shutdown the virtual machines,

0 Kudos
jpsider
Expert
Expert

Here is a quick and dirty script. You will need to enter your esx host/vcenter login information.

Be aware, this will shutdown any and all vm's on that host. No confirmation required.

connect-viserver <esxhost> <login info>

$vms = get-vm

foreach ($vm in $vms){

  write-host Shutting down $vm

  Shutdown-VMGuest $vm -Confirm:$false

}

0 Kudos
rdtechie
Enthusiast
Enthusiast

Or do it like this, assuming you are already connected to a ESXi host, and by using the PowerShell pipeline (requesting only VM's which are powered on):

Get-VM | Where-Object -FilterScript { $_.PowerState -eq 'PoweredOn' } | Stop-VMGuest -WhatIf -Confirm:$false -Verbose

PowerShell Addict. Make it so lover.
0 Kudos
jpsider
Expert
Expert

Be careful with "Stop-VMGuest" as it may not "gracefully" shutdown the Guest vm. But I agree that checking to see if the vm is powered on first could save you some time.

rdtechie
Enthusiast
Enthusiast

Stop-VMGuest is just an alias to Shutdown-VMGuest. So this behaviour should also be in Shutdown-VMGuest, or isn't?

PowerShell Addict. Make it so lover.
0 Kudos
jpsider
Expert
Expert

crap, I missed the guest piece. I guess I only saw stop-vm. Sorry.

0 Kudos
rdtechie
Enthusiast
Enthusiast

No need to say sorry. We're all in the communities to learn. Smiley Happy I learn everyday. Thanks!

PowerShell Addict. Make it so lover.
mdamda
Enthusiast
Enthusiast

Can i run these command by login directly to ESXi console rather than using ssh client (putty)

0 Kudos
jpsider
Expert
Expert

No, The commands we are referencing are for powercli.

If you want to use cmd line from esx, whether it be the console or ssh.  Here is a helpful article:

VMware KB: Powering off an unresponsive virtual machine on an ESX host

0 Kudos
mdamda
Enthusiast
Enthusiast

Thanks alot for the info.

I want to shutdown all the VMs on all the ESXi hosts. I have copied Virtual machine names in a text file so that i want them in the order to be shutdown.

Will the below powercli command  work for me.(I cannot test as i dont have testing environment)

$VMs = Get-Content C:\VMList.txt

Foreach ($VM in $VMs)

{       

  Shutdown-VMGuest $VM -Confirm:$false

   Write-Host "$VM Shutdown initiated"

}

In the same way after powering on the ESXi hosts also i want my virtual machines to poweron in order.

$VMs = Get-Content C:\VMList.txt

Foreach ($VM in $VMs)

{    

   Start-VM $VM -Confirm:$false -RunAsync

    Write-Host "$VM Start initiated"

}

0 Kudos
rdtechie
Enthusiast
Enthusiast

You can do this ( Stop-VMGuest takes in a VMGuest object 😞

Get-Content C:\VMList.txt | Foreach-Object -Process { Stop-VMGuest ( Get-VM $_ ) -Confirm:$false -Verbose }

-RunAsync is not ment for running the Cmdlet in a particular order; it just executes the command without waiting for result to come back.

I guess, if you want to process in a particular order, I think this will work. You  have to put the server names in a csv file; then you can use sort-object to define the order, like this:

Content of your VMlist.csv file:

Number,Name

01,server1

02,server2

03,server3

04,server4

05,server5

06,server6

07,server7

08,server8

09,server9

10,server10

Then you can run this command:

Import-Csv C:\VMlist.csv | Sort-Object Number | Foreach-Object -Process { Stop-VMGuest ( Get-VM $_.Name ) -Verbose }

If you want to change the order of the servers, just change the server name behind the number in VMlist.csv.

Let me know if it works.

PowerShell Addict. Make it so lover.
0 Kudos