• Admin

PowerCLI 101 - Automate that Thing!

I have not used PowerCLI/PowerShell for some time so thought I would have a refresher and include it in this blog post. I previously used CLI for handy ways to manage and automate vSphere and other VMware solutions.


vSphere PowerCLI is a product with over 400 cmdlets based on Microsoft PowerShell. The cmdlets can be used for automating vCenter, vSphere, vSAN, vROPS, VMC on AWS, Horizon View etc.

PowerShell can be installed on Windows with PowerShell and .NET. When running commands PowerCLI communicates with the API's of the target. When using API's there is no real dependency on the GUI so for example with product version upgrades the commands will still work and be backward compatible with older versions.


To begin with ensure that you are on the latest version of PowerShell, I upgraded to 5.1. Under the download page I got 5.1 for Server 2012 R2. Once upgraded you are ready to deploy PowerCLI.

To do this launch PowerShell.

PS C:\Find-Module -Name VMware.PowerCLI

The command above will confirm access to the PowerShell Gallery. I had an out of date NuGet (Used to automate install, upgrade, configure and remove software). I hit Yes to install and get an updated version of NuGet. Once done we can go ahead and install PowerCLI (This is done via PowerShell command line with no separate download required).

PS C:\Install-Module -Name VMware.PowerCLI -Scope CurrentUser

You will see the directory in C:\Users\Username\WindowsPowerShell being populated with modules.

PowerCLI is installed so now we can create a desktop shortcut that loads the executable and imports the module.

Location of Item

C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -noe -c "Import-Module VMware.PowerCLI"

Were now ready to start automating!

Connect to vCenter

To start with we can connect to vCenter, as the command shows above

PS C:\Connect VIServer YourVCServer, this will open a credential prompt. The underline shows that this is an environment input.

We can then get details on the inventory of vCenter.

Some Simple Commands

PS C:\Get-Inventory (Lists the full inventory of objects in vCenter including VMs, Folders, Clusters, Resource Pool and Hosts).

This can be narrowed down easily so for example, lets say we want to look at a specific cluster and find VMs ending with "VM".

PS C:\Get-Inventory - Location YourDC -Name *VM

A handy option is to perform a vMotion, so with the command above I have found that there is a VM ending with "VM" in the machine name. I will now vMotion this to another host.Firstly I am going to power on the VM

PS C:\Start-VM -VM NameOfVM

Then vMotion with the following

PS C:\Get-VM -Name NameOfVM | Move-VM -Destination TargetHost

To view and manage snapshot's you can use the following

PS C:\Get-VM | Get-Snapshot | Select VM,Name,Description

To then write this information out to a file we can use the Out-File cmdlet

PS C:\Get-VM | Get-Snapshot | Select VM,Name,Description | Out-File C:\VMware_Snapshots.txt

To get things a little more automated we can read from a file into a variable and then output.

PS C:\$VMList = Get-Content C:\VMware_VMs.txt

Get-VMGuest -VM $VMList | Select-Object VMName,State,IPAddress,OSFullName

Creating a VM is really simple

PS C:\New-VM -Name 'TestVM' –VMHost 'VMHost-1' -Datastore 'TestDatastore' -DiskGB 40 -MemoryGB 8 -NumCpu 2 -NetworkName 'Virtual Machine Network'

Scheduling the Scripts

When you have the required commands in place you can add them to a PowerShell script and add the .ps1 extension. This can then be scheduled in Task Scheduler

Just ensure you have the following before scheduling

Get-Module -Name VMware* -ListAvailable | Import-Module

Connect-VIServer -Server YourVC

There is a huge amount of amazing PowerCLI scripts with GitHub having some really good examples

This is just a very high level refresher on PowerCLI, stay tuned as I will be expanding on this post in the future with more detail!