A previous post on my blog shows us how to get the slot size information for each cluster which has HA enabled, it also discusses what a slot size is and points to some further reading on Yellow-Bricks.
Readers of the great HA and DRS book will know exactly what a slot size is, if you are unsure then I suggest you read my previous article or the HA and DRS book, it is important information to know.
But which VMs are setting your slot size ? This is a question which was emailed to me over a year ago, someone had issues finding the VMs which were setting their slot size and they had run out – not a good place to be.
I wrote a script for them and asked them to test it, then I completely forgot about it – until recently when the question came up again.
Now you probably think you know which VM’s are setting your slot size but the thing that struck me is that nearly all the people I asked to check this came back with the same comments:
Yep, it works and wow, I had forgotten about that machine and the resources I allocated to it !
So please, download it and give it a go, who knows you too may have a surprise.
Sample Results
Video Walkthrough
Script
Make sure you change the connection details in the first line.
Connect-VIServer MyVIServer foreach ($Cluster in Get-Cluster){ if($cluster.HAFailoverLevel -gt 0){ $SlotDetails = $Cluster.ExtensionData.RetrieveDasAdvancedRuntimeInfo() $Details = "" | Select Cluster, TotalSlots, UsedSlots, AvailableSlots, SlotNumvCPUs, SlotCPUMHz,SlotMemoryMB $Details.Cluster = $Cluster.Name $Details.TotalSlots = $SlotDetails.TotalSlots $Details.UsedSlots = $SlotDetails.UsedSlots $Details.AvailableSlots = $SlotDetails.TotalSlots - $SlotDetails.UsedSlots $Details.SlotNumvCPUs = $SlotDetails.SlotInfo.NumvCpus $Details.SlotCPUMHz = $SlotDetails.SlotInfo.CpuMHz $Details.SlotMemoryMB = $SlotDetails.SlotInfo.MemoryMB Write-Host -ForegroundColor Green "`nSlot info for $($Cluster.Name) cluster, NumberofCPUs: $($SlotDetails.SlotInfo.NumvCpus) SlotCPUMhz: $($SlotDetails.SlotInfo.CpuMHz) SlotMemoryMB: $($SlotDetails.SlotInfo.MemoryMB) " $vms = Get-VM -Location $cluster if ($SlotDetails.SlotInfo.CpuMHz -eq "256"){ Write "Default CPU slot size of 256Mhz found" foreach ($VM in $vms){ foreach ($Suspected in ($VM | where { $_.NumCPU -eq $SlotDetails.SlotInfo.NumvCpus })) { Write "Suspected CPU Count match: $($VM.Name)" } } } else { foreach ($VM in $vms){ foreach ($Suspected in ($VM | Get-VMResourceConfiguration | where { $_.CPUReservationMhz -eq $SlotDetails.SlotInfo.CpuMHz })) { Write "Suspected CPU match: $($VM.Name)" } } } foreach ($VM in $vms){ $MemResAndOverhead = 0 $MemRes = (($VM | Get-VMResourceConfiguration).MemReservationMB) $MemOver = [Math]::Round(($VM.ExtensionData.Runtime.MemoryOverhead / 1MB +1)) $MemResAndOverhead = $MemRes + $MemOver if (($MemResAndOverhead) -ge ($SlotDetails.SlotInfo.MemoryMB)) { Write "Suspected Memory match: $($VM.Name)" } } } else{ Write-Host -ForegroundColor Yellow "`nCluster $($cluster.Name) has no fail-over level defined" } }
We are on Vmware 5.1 and when I tried running your script the “NumberCPUs:”, “slotCPUMhz;” and “slotMemoryMB:” fields were blank. Any suggestions?
Ken
After doing some more reading today, I found it was in the copy/paste process I performed. Corrected this in the PowerGUI utility and ran the script successfully. Regardless, thank you for the reply and there may be some further inquiries from me in relation to the great topics you have here. Thank you for all of this!
— Jeff
Do you have the latest PowerCLI Installed ? http://virtu-al.net/go/powercli
Did you run the script from an editor or the powercli prompt ?
Did you put your own vcenter server in at the end of the connect-viserver cmdlet ?
Thanks
I’m just now working on utilizing PowerCLI in my environments. When I attempt to run this script after installing vSphere PowerCLI 4.1, I get the following:
[vSphere PowerCLI] C:\Users\kowalkjg\Downloads\scripts> .\SlotSizeInfo2.ps1
Unexpected token ‘Connect-VIServer’ in expression or statement.
At C:\Users\name\Downloads\scripts\SlotSizeInfo2.ps1:1 char:19
+ 1 Connect-VIServer <<<< myviserver.domain.net
+ CategoryInfo : ParserError: (Connect-VIServer:String) [], Parse
Exception
+ FullyQualifiedErrorId : UnexpectedToken
Probably a newbish question, but I have to start somewhere. Any assistance would be appreciated. Thank you!
Getting error
You cannot call a method on a null-valued expression.
At W:\Slotsize.ps1:5 char:71
+ $SlotDetails = $Cluster.ExtensionData.RetrieveDasAdvancedRuntimeInfo
<<<< ()
+ CategoryInfo : InvalidOperation: (RetrieveDasAdvancedRuntimeInf
o:String) [], RuntimeException
+ FullyQualifiedErrorId : InvokeMethodOnNull
Slot info for MyCluster1 cluster, NumberofCPUs: SlotCPUMhz: SlotMemoryMB:
Lists all of my vms, then moves on to next cluster with same error.
Ok so changing admission control policy to per host as opposed to per percentage based allows me to run the script and display results.
I tried to run this on my vcenter. I have two clusters and am getting results for one of them but for the second cluster I get this: Cluster cluster_name has no fail-over level defined. This is on a 13 host cluster with admission control enabled, percentage based set to 16%.
Awesome Al! That is even better than just a download link, haha!
Thank you, great effort!
Thanks for your comment, I have changed the display now so you should get the option to download the script at the top right when you move your mouse over the code.
Let me know if this doesnt work.
copying and pasting the scripts does not work. you should add a download link for your posts please.