PowerShell snippet- Finding XP and Server 2003 VMs

Some PowerShell to find all the VMs in an ESX environment which are powered on and running Windows XP or Server 2003.

In my VMware ESX environment I have a number of virtual machines still running Windows XP or Server 2003- usually performing very specific tasks or allowing access to legacy applications, but still part of the production environment. With the recent End of Support for Windows XP and the upcoming one next year for Server 2003 I need to look at each of these VMs and see if they can be upgraded or decommissioned. Listing these in the GUI is fiddly at best- I want VMs with one of these two OSes, from any datacentre and I only care about VMs which are powered on. So, PowerCLI to the rescue:

1get-vm |
2where {$_.PowerState -eq "PoweredOn" -and
3($_.Guest -like "*Windows XP*" -or $_.Guest -like "*Server 2003*")} |
4get-VMGuest |
5select VmName, OSFullName

Sample Output:

1VmName         OSFullName
2------         ----------
3MyServer1      Microsoft Windows Server 2003 Standard (32-bit)
4MyServer2      Microsoft Windows Server 2003 Standard (32-bit)
5MyServer3      Microsoft Windows Server 2003 Standard (32-bit)
6MyXPVM1        Microsoft Windows XP Professional (32-bit)
7MyXPVM2        Microsoft Windows XP Professional (32-bit)

Not the most complicated piece of scripting, but it’s answered my question and I can refer back to it as upgrades continue to see what systems remain.