Licensing in a virtualized world...Somewhat of a pain

Not only do you have to manage your vmware licenses, you have to make sure the VM's you are running are properly covered under an associated OS license.  I haven't really seen an elegant solution to this type of conundrum.  So I needed to create a script to look @ all my ESX hosts and see how many physical sockets they have and to see if there were Windows VM's running on them.

This way I could true up which ESX hosts I needed to license Windows Datacenter processor licenses against.  The same type logic could be applied for RHEL licenses.  Anyway, without further ado, here is the snippet I wrote up:

$vmhosts = Get-vmhost

$LicenseData = @()
Foreach ($vmhost in $vmhosts)
{
$NewDataSet = "" | Select Name, NumSockets,Cluster, Windows
$NewDataSet.name = $vmhost.name
$NewDataSet.numSockets = $vmhost.extensiondata.hardware.cpuinfo.numcpupackages
$NewDataSet.Cluster = $vmhost.parent.name
$NewDataSet.Windows = If (($vmhost | Get-VM | where {$_.guest -match "Windows"}).count -gt 0){"Yes"}Else{"No"}
$LicenseData += $NewDataSet
}

This'll return data in this type format:
Name of ESX host
Number of physical sockets
Cluster or parent node name
If a windows vm is found yes is returned, otherwise no.

No comments: