VMware Tools is a collection of in-guest drivers and agents that optimize performance and increase the manageability for VMs within vSphere environments. Guess what, PowerCLI provides a way to automate the management of the VMware Tools lifecycle! Even better, a new module was recently entered into the PowerCLI Community Repository to help make those management tasks even easier than before!
The module includes a collection of over 10 different advanced functions! These include the following:
Get-VMByToolsInfo | Retrieves the virtual machines with specified VMTools info. Get-VMToolsGuestInfo | Retrieves the guest info of specified virtual machines. Get-VMToolsInfo | Retrieves the VMTools version and build number info of specified virtual machines. Get-VMToolsInstallLastError | Retrieves the error code of last VMTools installation on specified virtual machines. Get-VMToolsUpgradePolicy | Gets the VMTool’s upgrade policy of specified virtual machines. Invoke-VMToolsListProcessInVM | Lists the running processes in the virtual machine. Invoke-VMToolsUpgradeInVMs | Upgrades VMTools to the version bundled by ESXi host. Invoke-VMToolsVIBInstall | Installs VMTool VIB in specified ESXi hosts. Set-VMToolsUpgradePolicy | Sets the VMTool’s upgrade policy to either «manual» or «upgradeAtPowerCycle» of specified virtual machines. Update-VMToolsConfInVM | Updates the tools.conf content in guest OS. Update-VMToolsImageLocation | Updates the /productLocker link in an ESXi host directly
Let’s take a look at how to get started using this great module.
Accessing the Module
There are a couple ways to get access to this great module, all of which go through the PowerCLI Community Repository. One of the easiest ways is to load up the repository’s page, click on the green ‘Clone or download’ button, then clicking on ‘Download ZIP’. This downloads the entire contents of the repository to your local system.
Once the download is complete, unzip the files and browse to the ‘Modules’ directory. We are now going to copy the VMToolsManagement folder and paste it in one of the directories that are listed in the PSModulePath variable. Doing this allows the module to be available for automatic importing by your PowerShell session!
By default, the PSModulePath variable contains the following directories:
In my environment, I have placed the module in the first of the above options. This is also where my PowerCLI modules are available.
One item to keep in mind, the ‘Update-VMToolsImageLocation’ does require the usage of an ESXi host’s SSH service. Therefore, the SSH service on the ESXi host must be running as well as having an SSH library on your local system.
There are a couple functions that make it really easy and straight forward to retrieve VMware Tools information from VMs in the environment. These functions accept VM input from either direct VM parameter usage or pipeline. Here’s example output from the following advanced functions:
There’s a very versatile function which allows us to query our environment for specific information about the state of VMware Tools on our VMs. This advanced function is ‘Get-VMByToolsInfo’ and has a couple nice parameters to help us out. The first parameter is ‘Tools Version’ which displays only VMs which contain the specified version. The next parameter is ‘ToolsRunningStatus’ which displays only VMs which are of the specified running state. The last parameter is ‘ToolsVersionStatus’ which displays only VMs that are of a certain status. The last two parameters feature tab complete functionality for each of their inputs.
Here are examples of a couple commands I ran within my environment:
Let’s move on past simply retrieving information now. There are two functions which allow us to both retrieve and manage the upgrade policy for VMs. This can be done with the following advanced functions:
The Set-VMToolsUpgradePolicy allows us to modify the upgrade policy for a VM with the ‘UpgradePolicy’ parameter. This parameter also allows for tab completion between the two accepted policies. Here’s an example of those two functions in action:
We also have the ability to change the VMware Tools logging level. This is something that is normally done internally on the guest system but, through the magic of PowerCLI, we can now do this remotely with the ‘Set-VMToolsConfInVM’ advanced function! This function features a ‘LogLevel’ parameter which handles the changing of log level. Tab completion is available for this parameter as well. Additional information about configuring these settings can be found in KB 1007873. One note about this function, be aware of what the permissions are on the local system. Certain OSes can be touchy about modifying files within the folders where these configuration files are held.
This module wouldn’t be complete without the ability to also upgrade a system’s VMware Tools too! This is accomplished with the ‘Invoke-VMToolsUpgradeInVMs’ advanced function. Here’s an example of it in action:
Lastly, there are two functions that help to manage VMware Tools’ accessibility directly from ESXi hosts! The ‘Update-VMToolsImageLocation’ advanced function allows us to change the location of where VMware Tools are stored for ESXi hosts. For example, we could store the VMware Tools and floppy files on a datastore instead of the local system! One other nice feature of this function, there is no reboot required for the configuration update to go into effect. Then, there is the ‘Invoke-VMToolsVIBInstall’ advanced function. This function allows us to install and make available updated versions of VMware Tools out of the normal ESXi update lifecycle.
Here’s an example of updating an ESXi host with a newer version of VMware tools by way of a VIB:
The VMToolsManagement module is a terrific resource for any administrator needing to get quick and easy access to manage the lifecycle of VMware Tools in their environment. This module comes packed with over 10 different advanced function to handle a majority of the tasks admins face. Head out to the PowerCLI Community Repository, and download it today!