VMware Cloud Community
jabbathehud
Contributor
Contributor

Get VM Stats outputs by different criterias

Hi there, first thanks if you are reading this and are trying to help.
I'm trying to write a script which generates the outputs shown below in the tabels.
I want to grab following info's in the first table: 

VM Count / Used Memory / Used Cores / allocated Discsapce

First I try to get the infos on datacenter level as we have 4 different datacenters. 

Summary by Datacenter

 

Datacenter:

Servers:

Memory:

Cores:

Disc allocated (GB):

PROD

2590

114091

16988

333550

TEST

317

7680

1040

21416

INT

215

3093

860

42441

DEV

64

2768

414

17864

 

Here I would like to get the stats from all the VMs which are running on all clusters.
Additionally I wanted to make a summary of all blades which are running in all clusters.

Summary by Type

Type:

Servers:

Memory:

Cores:

Disc allocated (GB):

Normal VMs

2919

38710

10972

419247

ESXi Hosts

202

89543

6804

0

 

In the last table im trying to output the same infos from all vms as in the last tabels. But this time sorted by operating system.

Summary by Operatingsystem

Operatingsystem:

Servers:

Memory:

Cores:

Disc allocated (GB):

Windows

1760

21674

7708

227709

RedHat

461

14876

2897

89155

Others

201

1245

5098

89155

 

In the moment i have this script so far: 


Connect-VIServer -Server ****

$totalvm = 0
$totalstorage = 0
$totalsockets = 0
$totalcorepersocket = 0
$totalcores = 0
$totalmemory = 0

Foreach ($vm in (Get-VM)) {


$totalstorage += $vm.UsedSpaceGB
$totalsockets += $vm.CoresPerSocket
$totalcorepersocket += $vm.NumCpu
$totalmemory += $vm.MemoryGB


}
$totalcores += $totalsockets * $totalcorepersocket
$totalvm= (Get-VM).count


$allexport= 0
$allexport = @(

[pscustomobject]@{TotalVMCount=$totalvm;Memory=$totalmemory;Cores=$totalcorepersocket;DiscallocatedGB=[math]::Round($totalstorage)}

)


$allexport | Out-File C:\scripts\LegacyReporting\allexport.txt


#____________Windows ________
$wintotalvm = 0
$wintotalstorage = 0
$wintotalsockets = 0
$wintotalcorepersocket = 0
$wintotalcores = 0
$wintotalmemory = 0

Foreach ($winvm in (Get-VM).where{$_.Guest.OSFullName -match 'Windows'}) {

Write-Host $winvm
$wintotalstorage += $winvm.UsedSpaceGB
$wintotalsockets += $winvm.CoresPerSocket
$wintotalcorepersocket += $winvm.NumCpu
$wintotalmemory += $winvm.MemoryGB


}

$wintotalcores += $wintotalsockets * $wintotalcorepersocket
$wintotalvm= ((Get-VM).where{$_.Guest.OSFullName -match 'Windows'}).count


$winexport = 0
$winexport = @(

[pscustomobject]@{TotalVMCount=$wintotalvm;Memory=$wintotalmemory;Cores=$wintotalcorepersocket;DiscallocatedGB=[math]::Round($wintotalstorage)}

)

$winexport | Out-File C:\scripts\LegacyReporting\winswisstxttestexport.txt

#____________Linux________

$lintotalvm = 0
$lintotalstorage = 0
$lintotalsockets = 0
$lintotalcorepersocket = 0
$lintotalcores = 0
$lintotalmemory = 0

Foreach ($linvm in (Get-VM).where{$_.Guest.OSFullName -match 'Centos'}) {

Write-Host $linvm
$lintotalstorage += $winvm.UsedSpaceGB
$lintotalsockets += $winvm.CoresPerSocket
$lintotalcorepersocket += $linvm.NumCpu
$lintotalmemory += $linvm.MemoryGB


}

$lintotalcores += $lintotalsockets * $lintotalcorepersocket
$lintotalvm= ((Get-VM).where{$_.Guest.OSFullName -match 'Centos'}).count


$linexport = 0
$linexport = @(

[pscustomobject]@{TotalVMCount=$lintotalvm;Memory=$lintotalmemory;Cores=$lintotalcorepersocket;DiscallocatedGB=[math]::Round($lintotalstorage)}

)

$linexport | Out-File C:\scripts\LegacyReporting\linswisstxttestexport.txt

#>

#____________Other________

$ototalvm = 0
$ototalstorage = 0
$ototalsockets = 0
$ototalcorepersocket = 0
$ototalcores = 0
$ototalmemory = 0

Foreach ($ovm in (Get-VM).where{$_.Guest.OSFullName -match 'Other'}) {

Write-Host $ovm
$ototalstorage += $ovm.UsedSpaceGB
$ototalsockets += $ovm.CoresPerSocket
$ototalcorepersocket += $ovm.NumCpu
$ototalmemory += $ovm.MemoryGB


}

$ototalcores += $ototalsockets * $ototalcorepersocket
$ototalvm= ((Get-VM).where{$_.Guest.OSFullName -match 'Other'}).count


$oexport = 0
$oexport = @(

[pscustomobject]@{TotalVMCount=$ototalvm;Memory=$ototalmemory;Cores=$ototalcorepersocket;DiscallocatedGB=[math]::Round($ototalstorage)}

)

$oexport | Out-File C:\scripts\LegacyReporting\otestexport.txt

 

I was able to "find out" how to get different stats by operating system but I dont think this is the slimmest way by any chance.
For the table summary by datacenter, I can't wrap my head around a script which would result in the output needed.

Does anyone one have any suggestions for me how I could solve my situation?

Thanks a lot

Reply
0 Kudos
1 Reply
LucD
Leadership
Leadership

You are looping over all the VMs in your Center with

Foreach ($vm in (Get-VM)) {

}

 

You could add an additional loop over all Datacenters

foreach ($dc in Get-Datacenter) {
    foreach($vm in Get-VM -Location $dc){
        
    }
}

 Then you could get summaries per Datacenter.


Blog: lucd.info  Twitter: @LucD22  Co-author PowerCLI Reference

Reply
0 Kudos