From time to time we want to make sure our VMs are up to spec. So this report might help you.
Basically it will output a report CSV with name report_CPU_Socket.csv.
Obviously this can be changed by updating the last line in the script which is the responsible for redirecting the output to a file.
$array = @() $vms = Get-view -ViewType VirtualMachine foreach ($vm in $vms) { $obj = new-object psobject $obj | Add-Member -MemberType NoteProperty -Name name -Value $vm.Name $obj | Add-Member -MemberType NoteProperty -Name TotalCores -Value $vm.config.hardware.NumCPU $obj | Add-Member -MemberType NoteProperty -Name TotalSockets -Value ($vm.config.hardware.NumCPU/$vm.config.hardware.NumCoresPerSocket) $obj | Add-Member -MemberType NoteProperty -Name CoresPersocket -Value $vm.config.hardware.NumCoresPerSocket $array += $obj } $array |Export-Csv .\report_CPU_Socket.csv -NoTypeInformation
This is great but how about if you have thousands of VMs and are only interested in a few set?
Well then you can filter them. By adjusting line 2 on the script;
$vms = Get-view -ViewType VirtualMachine |where {$_.name -like 'MS*'}
The above code will get all VMs that start with MS. So full code would look like this:
$array = @() $vms = Get-view -ViewType VirtualMachine |where {$_.name -like 'MS*'} foreach ($vm in $vms) { $obj = new-object psobject $obj | Add-Member -MemberType NoteProperty -Name name -Value $vm.Name $obj | Add-Member -MemberType NoteProperty -Name TotalCores -Value $vm.config.hardware.NumCPU $obj | Add-Member -MemberType NoteProperty -Name TotalSockets -Value ($vm.config.hardware.NumCPU/$vm.config.hardware.NumCoresPerSocket) $obj | Add-Member -MemberType NoteProperty -Name CoresPersocket -Value $vm.config.hardware.NumCoresPerSocket $array += $obj } $array |Export-Csv .\report_CPU_Socket.csv -NoTypeInformation
You can use several filters within a single query just use -AND and -OR to customize the query to your needs
More on Powershell operators here