Author Archives: Carter Shanklin

Find out how many VMs you’re creating a month with this simple script.

If you haven’t seen it, Alan Renouf has made a great script called “Who created that VM?” that populates custom variables to tell you who created a VM and when they did it.

I was showing this to a user the other day and they noticed they could also use this to figure out how many VMs they’re creating a month and help track their growth rate that way. Sure enough, once you’ve run Alan’s script it’s really easy to get just such a report.


Here’s a sample of the script in action against my vCenter.


You can also export this stuff to a spreadsheet, just follow the sample code above.

Now Available: PowerCLI cmdlets for vCenter Update Manager!

I’m happy to announce that we’ve released PowerCLI cmdlets for Update Manager, a.k.a. VUM, that are compatible with PowerCLI 4.0 U1. This new PowerShell snapin provides 13 cmdlets as follows:

Cmdlet Name

Cmdlet Description


Attaches baselines to the specified Template, VirtualMachine, VMHost, Cluster, Datacenter, Folder, and VApp objects.

Attaching a baseline to a container object such as a folder or datacenter transitively attaches the baseline to all objects in the container.


Detaches baselines from the specified inventory objects.


Downloads new patches into the Update Manager patch repository from the enabled patch download sources.


Retrieves the baselines specified by the provided cmdlet



Retrieve baseline compliance data for the specified object of type Template, VirtualMachine, VMHost, Cluster, Datacenter, Folder, and VApp.


Retrieves all available patches or those specified by the provided cmdlet parameters.


Retrieves all  patch baselines or those specified by the provided cmdlet parameters.


Creates a new patch baseline. Patch baselines can be applied to either hosts or virtual machines. Depending on the patch criteria you select, patch baselines can be either dynamic or static (fixed).


Remediates an inventory object against the specified baselines.


Deletes the specified baselines from their servers. Before the

removal, the baselines are detached from all entities they have been attached to.


Scans inventory objects for baselines attached to them.


Modifies the properties of a patch baseline. You can specify explicitly the patches you want to include in the baseline through the IncludePatch parameter.


Initializes staging of patches. Staging allows you to download

patches from the Update Manager server to the ESX/ESXi hosts, without applying the patches immediately.

Download the VUM PowerCLI cmdlets now, remember you will also need PowerCLI 4.0 U1.

Get your popcorn ready, sample TrainSignal PowerCLI video!

Critics are raving about Hal Rottenberg’s new TrainSignal video “The Case of the Open Snapshot”, a taut psychological thriller that will send your emotions on a roller coaster ride as our sysadmin hero fights bravely to save his datastore, keep his servers up and avert an international crisis. Ok maybe I made some of that up but this still pretty useful information.

Hal shows how to:

  1. Report on snapshots, including snapshot size and age.
  2. Delete snapshot en-masse, including snapshots that are so big they can take hours to remove.

Great work Hal!

Also don’t forget to check out TrainSignal’s vSphere Pro Series Volume 1 for all this great PowerCLI content and more.

How to find out what VLANs your ESX hosts can really see.

Recently someone asked me if there was a way, programmatically, to figure out the “observed IP ranges” and “observed VLANs’” that you can see in vSphere Client. Don’t know what I mean? Here’s a picture to help you out.


The data is available as a tooltip in the network configuration tab (naturally!) when you hover over Observed IP Ranges. How do you get this stuff out of the API.

Turns out there’s a rather obscure little function called QueryNetworkHint. This function takes the name of the physical NIC as input, which makes it perfect for pairing with our Get-VMHostNetworkAdapter cmdlet. Here’s a PowerShell advanced function that does exactly that, followed by some screenshots of it in action.


Let’s have a look at that in action. First some basic usage, combining Get-VMHost, Get-VMHostNetworkAdapter and the Get-ObservedIPRange advanced function.


Comparing these to the screenshot above you’ll see they’re the same. Let’s take it a step further and suppose we want to determine if a certain adapter can see a certain VLAN, let’s say 2903. Here’s some code that does it:


This function can really help you out if you use sophisticated networking to your ESX hosts but don’t control the switches directly, so you have to coordinate with a member of the networking team.

Update 1: As a reader kindly pointed out, this will only show VLANs for which the ESX server has seen actual traffic, it will not probe the switch for configuration.

Update 2: The code sample has been updated to fix the type name in the advanced function. The old function used a type name that only worked in internal builds of PowerCLI.

Video killed the podcast star: New PowerCLI training from TrainSignal!

trainsignalMany of you are familiar with Hal Rottenberg, who is the co-host of the PowerScripting Podcast along with Jon Walz. Hal’s resource is a great resource for anyone learning or using Windows PowerShell. You may also recall that Hal is the guy who wrote the “PowerCLI Bible”, Managing VMware Infrastructure with Windows PowerShell.

Well Hal’s been hard at work again this time producing some great PowerCLI content for TrainSignal in their newest video training series, vSphere Pro Series Volume 1.

vSphere Pro Series Volume 1 doesn’t just cover PowerCLI, in fact it covers:

  • VMware View
  • VMware ThinApp
  • Cisco Nexus 1000v
  • And of course PowerCLI.

For you PowerCLI fans out there here’s what to expect in Hal’s PowerCLI training:

  1. Introduction to PowerCLI
  2. PowerShell Basics
  3. PowerCLI Concepts – Parts 1 and 2
  4. PowerCLI in the Real World
  5. PowerCLI Cmdlet Deep Dives

We’re finding that the admins who know PowerCLI really well are the rock stars of their team because through their script-writing kung fu they save their team mates tons of time and can easily come up with solutions to most any crisis. These videos will put you directly on the path to PowerCLI mastery.

As a big bonus, those of you who were paying attention at VMworld 2009 will also remember that VMware View is soon going to introduce its own set of PowerShell functionality, so if you’re a View expert there’s no better way to get ready for the new power and flexibility you’re soon going to have.

So be sure to visit TrainSignal and check out Pro Series Volume 1 today!

At Partner Exchange next week? Unlock the secrets of the vSphere API with “Project Onyx”!

onyx1 If you’re at VMware Partner Exchange next week be sure to come see me at my session, TEXIBP1007 – also known as “Getting Stoned with ‘Project Onyx’” on Thursday at 11:30.

If you haven’t seen it, Onyx is a tool that converts vSphere Client UI clicks into executable code, which means that instead of writing your code the hard way you just use a tool you know and love to automatically generate your code. If you can’t wait to get started you can download Onyx or visit our community.

Since it’s Partner Exchange, for one day only I’ll be wearing my developer’s hat and showing how Onyx can help you more quickly and effectively write Java code for managing vSphere.

Top 3 reasons to attend:

  1. Learn how Onyx can help you even if you’re a Java/C# developer and not a PowerCLI user.
  2. Using Onyx means no more digging around in the vSphere API docs to figure out what properties you need.
  3. Learn how Onyx can even help you debug your own applications!

Hope to see you there, it will be a fun and informative time!

Your best PowerCLI script could win you $2,500 cash!

In case you missed it, VMware is running a Script-O-Mania contest to find the world’s very best ESXi management scripts.  One point that might be worth clarifying, it doesn’t have to manage just ESXi, so if it works with ESX and ESXi that’s ok. So dust off those old PowerCLI and get submitting!

Hurry, contest ends March 15th, 2010!

Full details are available at

5 PowerCLI how-to videos for your viewing pleasure.

It’s been a while since I updated so I thought I’d mention a few videos I made a while back that give some useful tips in using PowerCLI 4.0 U1.


Video 1: Using multiple sessions with PowerCLI 4.0 U1.

This first video shows a few tips for dealing with multiple sessions with U1. With U1 you can connect to multiple vCenters or multiple ESXes or even some vCenter and some ESXes and apply your commands across everything. There’s a lot of possible uses here but Glenn Sizemore pointed out an interesting use where if his vCenter ever goes offline he’s not sure where it is (Glenn probably uses DRS and vCenter can move around somewhat randomly.) With this new feature he can just log in to all his ESX hosts at once and find it.

It’s also worth pointing out that U1 has a bug that if you use SSO to log into vCenter, then disconnect, you won’t be able to log back in using SSO without restarting PowerCLI. Expect this to be fixed in the next release.


Video 2: Importing vApps with PowerCLI 4.0 U1.


Importing OVF-based vApps with PowerCLI is pretty much a one-liner. It’s about as easy as it gets, what more can you say?


Video 3: New Invoke-VMScript Goodies.

The Invoke-VMScript cmdlet runs a script inside your guest and returns its output. Two major improvements to Invoke-VMScript were made in U1, first you can run BAT scripts instead of PowerShell scripts within your guest. Second, Invoke-VMScript now supports shell scripts on Linux. Perfect for the occasional Linux sysadmin.


Video 4: NIC Teaming Policies.


If you were trying to dream up the 7 deadly sins of virtualization, not having redundant networking would probably be number 1. Think of it this way, you’re putting 5 or 10 or 20 virtual machines into one physical box, then relying on a flimsy little cable to connect all of this stuff to the outside world. If you’re going to put all your eggs in one basket, you have to make sure it’s a really good basket. So everyone who virtualizes needs redundant networking, and this video shows how you can set up, configure and also audit your virtual network settings.


Video 5: Patching ESX 4.

We also added the ability to patch ESX 4.0 and up in U1. It also supports a number of different patching mechanisms, such as web-based, datastore based, and local file based. This video shows what I would consider to be the best practice for patching a bunch of ESX hosts, namely upload the patch to some datastore all the hosts can see and then issue the patch commands as in the video. If you take this approach patching is a lot faster since you’re not uploading the patch multiple times.

If you’re the sort of person who reads fine print, you’ll notice that this cmdlet is marked as experimental in the documentation. Sometimes people call things experimental just because they’re afraid people will use it and they won’t be able to whimsically change it to whatever they feel like. In this instance however, and for reasons I can’t really elaborate on too much, there is a very good possibility this interface will be forced to change in the future. So I would say use it against ESX 4 if you find it useful, but don’t depend on it working the same way when ESX 5 (or whatever it ends up being called) is shipped.

PowerCLI 4.0 U1 is out!

Tonight we released PowerCLI 4.0 U1. This release contains more than 60 new cmdlets as well as greatly improved performance, a new feature to make it easy to manage multiple ESX or vCenter servers from a single window and much, much more. We’ve also put our cmdlet reference online. Watch this space over the next few days for demo videos but in the meantime don’t forget to download and give it a try.

“Project Onyx” is here.

A few months ago we announced a very exciting new application we call “Project Onyx”. To put it simply, Project Onyx is a script recorder for vSphere Client. Since then my inbox has been flooded with requests from all over the world from people wanting to try Onyx. At long last we’ve released our first public alpha.

Here’s a video that shows a quick demo of using the alpha build. You can also download Project Onyx.

There are two things to note when you’re using Onyx. First, the code Onyx generates makes heavy use of direct API calls rather than PowerCLI cmdlets. So even if you use Onyx to power on a VM, instead of using the Start-VM cmdlet it will use the API’s PoweronMultiVM_Task. To put it another way Onyx is best for automating things that can’t be automated using native PowerCLI cmdlets.

Second, you will need to edit scripts that Onyx produces in order to turn them into reusable code. The code Onyx produces today includes a lot of parameters that are very specific to the object you select and have to be refactored or removed. I’ll expand on this subject in later posts. Still Onyx makes it a lot easier than poring through API documentation.