<# License Vaidator Script for vSphere 5 vRAM Copyright Ryan McLean 2011 ryan1 underscore 00 _at_ hotmail dot com Version: 0.1 #> $objs = @() $servInst = Get-View ServiceInstance $licMgr = Get-View $servInst.Content.licenseManager $licAssignMgr = Get-View $licMgr.licenseAssignmentManager $totalVRAMEntitlement = 0 $totalVRAMUsed = 0 Get-View -ViewType HostSystem | Sort Name | ` ForEach-Object { $sys = "" | ` Select-Object Name, CPUType, PhysicalCPUs, CoresPerCPU, TotalCores, ` ThreadsPerCore, TotalThreads, LicenseType, vRAMEntitalment, ` vRAMUsedPoweredOnOnly, TotalvRAMUsed, Compliant, OverAllocated $sys.Name = $_.Name $sys.CPUType = $_.Hardware.CpuPkg[0].Description $sys.PhysicalCPUs = $_.Hardware.CpuInfo.NumCpuPackages $sys.CoresPerCPU = ` ($_.Hardware.CpuInfo.NumCpuCores/$_.Hardware.CpuInfo.NumCpuPackages) $sys.TotalCores = $_.Hardware.CpuInfo.NumCpuCores $sys.ThreadsPerCore = ` ($_.Hardware.CpuInfo.NumCpuThreads/$_.Hardware.CpuInfo.NumCpuCores) $sys.TotalThreads = $_.Hardware.CpuInfo.NumCpuThreads $license = $licAssignMgr.QueryAssignedLicenses($_.Config.Host.Value) $license = $license.GetValue(0) $sys.LicenseType = $license.AssignedLicense.Name if ($sys.LicenseType -like "*Enterprise Plus") { $sys.vRAMEntitalment = ($sys.PhysicalCPUs*48) } elseif ($sys.LicenseType -like "*Enterprise") { $sys.vRAMEntitalment = ($sys.PhysicalCPUs*32) } elseif ($sys.LicenseType -like "*Standard") { $sys.vRAMEntitalment = ($sys.PhysicalCPUs*24) } elseif ($sys.LicenseType -like "*Essentials Plus Kit") { $sys.vRAMEntitalment = ($sys.PhysicalCPUs*24) } elseif ($sys.LicenseType -like "*Essentials Kit") { $sys.vRAMEntitalment = ($sys.PhysicalCPUs*24) } Get-VM -Location $sys.Name | ` ForEach-Object { if ($_.powerstate -eq "PoweredOn") { $sys.vRAMUsedPoweredOnOnly += ($_.MemoryMB/1024) } $sys.TotalvRAMUsed += ($_.MemoryMB/1024) } $sys.vRAMUsedPoweredOnOnly = "{0:N2}" -f $sys.vRAMUsedPoweredOnOnly $sys.TotalvRAMUsed = "{0:N2}" -f $sys.TotalvRAMUsed if ($sys.vRAMEntitalment -ge $sys.vRAMUsedPoweredOnOnly) { $sys.Compliant = $true } else { $sys.Compliant = $false } if ($sys.vRAMEntitalment -lt $sys.TotalvRAMUsed) { $sys.OverAllocated = $true } else { $sys.OverAllocated = $false } $totalVRAMEntitlement += $sys.vRAMEntitalment $totalVRAMUsed += $sys.TotalvRAMUsed $objs += $sys } $objs if ($totalVRAMEntitlement -ge $totalVRAMUsed) { Write-Host "Overall Compliant" } else { Write-Host "Overall Non-Compliant" }