vmware-cmd Examples – Working with vMA and Virtual Machines

VMware-cmd is a command line utility that can be run from a vMA, which allows you to perform various virtual machine operations.

There are a number of options available when running the command:

vi-admin@vma:~> vmware-cmd
   Usage: vmware-cmd    
          vmware-cmd -s   

     Options:
       Connection Options:
          -H or --server             specifies an ESX host or a vCenter Server
          -h or --vihost      specifies a target host if host is a virtual center
          -O                         specifies an alternative port
          -Q                     specifies an alternative protocol
          -U or --username       specifies a username
          -P or --password       specifies a password
          --sessionfile                    specifies a sessionfile path
          --passthroughauth                specifies a login by sspi option
          --credstore                      specifies to fetch Credential store information
          --encoding                       specifies encoding option
       General Options:
          -h More detailed help.
          -q Quiet. Minimal output
          -v Verbose.

     Server Operations:
       vmware-cmd -l
       vmware-cmd -s register <config_file_path>  
       vmware-cmd -s unregister <config_file_path>

     VM Operations:
       vmware-cmd  getstate
       vmware-cmd  start <powerop_mode>
       vmware-cmd  stop <powerop_mode>
       vmware-cmd  reset <powerop_mode>
       vmware-cmd  suspend <powerop_mode>
       vmware-cmd  setguestinfo  
       vmware-cmd  getguestinfo 
       vmware-cmd  getproductinfo 
       vmware-cmd  connectdevice <device_name>
       vmware-cmd  disconnectdevice <device_name>
       vmware-cmd  getconfigfile
       vmware-cmd  getuptime
       vmware-cmd  answer
       vmware-cmd  gettoolslastactive
       vmware-cmd  hassnapshot
       vmware-cmd  createsnapshot    
       vmware-cmd  revertsnapshot
       vmware-cmd  removesnapshots

Synopsis: /usr/bin/vmware-cmd OPTIONS

Common VI options:
   --config (variable VI_CONFIG)
      Location of the VI Perl configuration file
   --credstore (variable VI_CREDSTORE)
      Name of the credential store file defaults to /.vmware/credstore/vicredentials.xml on Linux and /VMware/credstore/vicredent                             ials.xml on Windows
   --encoding (variable VI_ENCODING, default 'utf8')
      Encoding: utf8, cp936 (Simplified Chinese), iso-8859-1 (German), shiftjis (Japanese)
   --help
      Display usage information for the script
   --passthroughauth (variable VI_PASSTHROUGHAUTH)
      Attempt to use pass-through authentication
   --passthroughauthpackage (variable VI_PASSTHROUGHAUTHPACKAGE, default 'Negotiate')
      Pass-through authentication negotiation package
   --password (variable VI_PASSWORD)
      Password
   --portnumber (variable VI_PORTNUMBER)
      Port used to connect to server
   --protocol (variable VI_PROTOCOL, default 'https')
      Protocol used to connect to server
   --savesessionfile (variable VI_SAVESESSIONFILE)
      File to save session ID/cookie to utilize
   --server (variable VI_SERVER, default 'localhost')
      VI server to connect to. Required if url is not present
   --servicepath (variable VI_SERVICEPATH, default '/sdk/webService')
      Service path used to connect to server
   --sessionfile (variable VI_SESSIONFILE)
      File containing session ID/cookie to utilize
   --url (variable VI_URL)
      VI SDK URL to connect to. Required if server is not present
   --username (variable VI_USERNAME)
      Username
   --verbose (variable VI_VERBOSE)
      Display additional debugging information
   --version
      Display version information for the script

You can run the command, specifying connection and authentication details for a host each time, or you can make use of the vifptarget command on the vMA, so that you don’t need to enter credentials each time you run the command. The examples I use here will make use of vi-fastpass.

Listing Virtual Machines Registered on a Host

To list the VMs registered on a given host, we can use the VMware-cmd -l command:

vi-admin@vma:~> vifptarget --set esxi1.vmlab.loc
vi-admin@vma:~[esxi1.vmlab.loc]> vmware-cmd -l

/vmfs/volumes/5221687f-72547f8e-a71d-005056af71fa/XP-Temp/XP-Temp.vmx
vi-admin@vma:~[esxi1.vmlab.loc]>

Registering and Unregistering Virtual Machines

If we wish to unregister a virtual machine from a host we can run the following:

vi-admin@vma:~[esxi1.vmlab.loc]> vmware-cmd -s unregister /vmfs/volumes/5221687f-72547f8e-a71d-005056af71fa/XP-Temp/XP-Temp.vmx

unregister() = 1

If we list the VMs registered on the host again, it shows the following:

vi-admin@vma:~[esxi1.vmlab.loc]> vmware-cmd -l
No virtual machine found.

If you are doing this on a host that is connected to vCenter you will see that the VM becomes orphaned:

To register a VM we can run the following:

vi-admin@vma:~[esxi1.vmlab.loc]> vmware-cmd -s register /vmfs/volumes/5221687f-72547f8e-a71d-005056af71fa/XP-Temp/XP-Temp.vmx
register() =1
vi-admin@vma:~[esxi1.vmlab.loc]> vmware-cmd -l

/vmfs/volumes/5221687f-72547f8e-a71d-005056af71fa/XP-Temp/XP-Temp.vmx

Now, as seen above, when running the list command, we can see that the virtual machine is registered once again. The virtual machine will also no longer be orphaned in VirtualCenter.

Deleting a Virtual Machine

I’ve created another VM to demonstrate deleting a virtual machine using VMware-cmd. We’ll start by running the list command:

vi-admin@vma:~[esxi1.vmlab.loc]> vmware-cmd -l

/vmfs/volumes/5221687f-72547f8e-a71d-005056af71fa/XP-Temp/XP-Temp.vmx
/vmfs/volumes/5221687f-72547f8e-a71d-005056af71fa/XP/XP.vmx

We will delete the VM named ‘XP’ by running the following, first to unregister the VM:

vmware-cmd -s unregister /vmfs/volumes/5221687f-72547f8e-a71d-005056af71fa/XP/XP.vmx

Then to delete the virtual machines files from the datastore, using the vifs command:

vi-admin@vma:~[esxi1.vmlab.loc]> vifs --rm "/vmfs/volumes/5221687f-72547f8e-a71d-005056af71fa/XP"
Remove '/vmfs/volumes/5221687f-72547f8e-a71d-005056af71fa/XP'? (y/n) : y
Deleted file '[] /vmfs/volumes/5221687f-72547f8e-a71d-005056af71fa/XP' successfully.
vi-admin@vma:~[esxi1.vmlab.loc]>

Working with Snapshots using vmware-cmd

To determine whether a virtual machine has any snapshots, we can run the following:

vi-admin@vma:/tmp[192.168.88.134]> vmware-cmd /vmfs/volumes/4f27b82e-3fc1540e-bf6b-000c295da2d9/XP/XP.vmx hassnapshot
hassnapshot () = 1

We can see that this VM has a snapshot. We can use vmware-cmd to delete the snapshot by running:

vi-admin@vma:/tmp[192.168.88.134]> vmware-cmd /vmfs/volumes/4f27b82e-3fc1540e-bf6b-000c295da2d9/XP/XP.vmx removesnapshots
removesnapshot () = 1

To create a snapshot run:

vi-admin@vma:/tmp[192.168.88.134]> vmware-cmd /vmfs/volumes/4f27b82e-3fc1540e-bf6b-000c295da2d9/XP/XP.vmx createsnapshot snap1
For creating a snapshot you must specify    .
vi-admin@vma:/tmp[192.168.88.134]> vmware-cmd /vmfs/volumes/4f27b82e-3fc1540e-bf6b-000c295da2d9/XP/XP.vmx createsnapshot snap1 snapdesc 0 0
createsnapshot (snap1 snapdesc 0 0) = 1

Switching to the vSphere client, we can see the tasks that we have just been running, with the user being vi-admin:

Virtual Machine Power Operations using vmware-cmd

To power on a virtual machine you can run the following:

vi-admin@vma:~[esxi1.vmlab.loc]> vmware-cmd /vmfs/volumes/522258e8-aca71415-31a4-000c293cc34e/XP-Temp/XP-Temp.vmx start
start() = 1

To shutdown a virtual machine gracefully, provided VMtools is installed, run:

vi-admin@vma:~[esxi1.vmlab.loc]> vmware-cmd /vmfs/volumes/522258e8-aca71415-31a4-000c293cc34e/XP-Temp/XP-Temp.vmx stop soft
stop() = 1

You can power off, rather than shutdown by using ‘stop hard’ rather than ‘stop soft’. If you want to reboot a VM or reset it you can use ‘reset soft’ and ‘reset hard’ respectively.

To check the power state of a virtual machine using VMware-cmd you can run:

vi-admin@vma:~[esxi1.vmlab.loc]> vmware-cmd /vmfs/volumes/522258e8-aca71415-31a4-000c293cc34e/XP-Temp/XP-Temp.vmx getstate
getstate() = on

And to check the uptime:

vi-admin@vma:~[esxi1.vmlab.loc]> vmware-cmd /vmfs/volumes/522258e8-aca71415-31a4-000c293cc34e/XP-Temp/XP-Temp.vmx getuptime
getuptime() = 120

Useful Links and Resources

https://kb.vmware.com/selfservice/microsites/search.do?language=en_US&cmd=displayKC&externalId=2012964

Related posts

VMware vSphere Virtual Machine Snapshots Explained

How to Enable SSH on All ESXi Hosts using PowerCLI

How to Install VMware Tools on Debian 11

This website uses cookies to improve your experience. We'll assume you're ok with this, but you can opt-out if you wish. Read More