This VMware PowerCLI Script gathers the current SLIs of the given vSphere Cluster. The values are only a snapshot of the current state, no statistics are processed (so far).
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
function Get-ClusterSLO { | |
<# | |
.NOTES | |
=========================================================================== | |
Created by: Markus Kraus | |
Twitter: @VMarkus_K | |
Private Blog: mycloudrevolution.com | |
=========================================================================== | |
Changelog: | |
2020.08 ver 1.0 Base Release | |
=========================================================================== | |
External Code Sources: | |
- | |
=========================================================================== | |
Tested Against Environment: | |
vSphere Version: 6.7 U3 | |
PowerCLI Version: PowerCLI 12.0.0 | |
PowerShell Version: 5.1 | |
OS Version: Windows Server 2016 | |
=========================================================================== | |
Keywords vSphere, ESXi, VM, Sizing | |
=========================================================================== | |
.DESCRIPTION | |
This VMware PowerCLI Script gathers the current SLIs of the given vSphere Cluster. | |
The values are only a snapshot of the current state, no statistics are processed (so far). | |
.Example | |
Get-Cluster -Name $ClusterName | Get-ClusterSLO | |
.PARAMETER Cluster | |
vSphere Cluster | |
#Requires PS -Version 5.0 | |
#Requires -Modules VMware.VimAutomation.Core, @{ModuleName="VMware.VimAutomation.Core";ModuleVersion="6.3.0.0"} | |
#> | |
[CmdletBinding()] | |
param( | |
[Parameter(Mandatory=$True, ValueFromPipeline=$true, Position=0)] | |
[VMware.VimAutomation.ViCore.Impl.V1.Inventory.ComputeResourceImpl] $Cluster | |
) | |
Process { | |
$MyView = @() | |
foreach ($Object in $Cluster) { | |
# CLuster Inventory | |
$ClusterVMs = $Object | Get-VM -Verbose:$False | |
$ClusterVMsPoweredOn = $ClusterVMs | where {$_.PowerState -eq "PoweredOn"} | |
$ClusterDatastores = $Object | Get-Datastore -Verbose:$False | |
$ClusterHosts = $Object | Get-VMHost -Verbose:$False | |
# Host Memory | |
$HostsAverageMemoryUsageGB = [math]::round( ($ClusterHosts | Measure-Object -Average -Property MemoryUsageGB).Average,1 ) | |
$HostsAverageMemoryUsage = $([math]::round( (($ClusterHosts | Measure-Object -Average -Property MemoryUsageGB).Average / ($ClusterHosts | Measure-Object -Average -Property MemoryTotalGB).Average) * 100,1 )) | |
$HostsAverageCpuUsageMhz = [math]::round( ($ClusterHosts | Measure-Object -Average -Property CpuUsageMhz).Average,1 ) | |
$HostsAverageCpuUsage = $([math]::round( (($ClusterHosts | Measure-Object -Average -Property CpuUsageMhz).Average / ($ClusterHosts | Measure-Object -Average -Property CpuTotalMhz).Average) * 100,1 )) | |
# Cluster CPU Calculation | |
$VMvCPUs = ($ClusterVMs | Measure-Object -Sum -Property NumCpu).sum | |
$VMAvgCPUs = [math]::round(($ClusterVMs | Measure-Object -Average -Property NumCpu).Average,1 ) | |
$VMAvgMemGB = [math]::round(($ClusterVMs | Measure-Object -Average -Property MemoryGB).Average,1 ) | |
$LogicalThreads = $Object.ExtensionData.Summary.NumCpuThreads | |
$CpuCores = $Object.ExtensionData.Summary.NumCpuCores | |
$vCPUlCPUratio = [math]::round( $VMvCPUs / $LogicalThreads,1 ) | |
$CpuTotalMhz = $Object.ExtensionData.Summary.UsageSummary.TotalCpuCapacityMhz | |
$CpuDemandMhz = $Object.ExtensionData.Summary.UsageSummary.CpuDemandMhz | |
$CPUUsage = [math]::round( ($CpuDemandMhz / $CpuTotalMhz) * 100 ,1 ) | |
# Cluster Memory Calculation | |
$AllocatedVMMemoryGB = [math]::round( ($ClusterVMs | Measure-Object -Sum -Property MemoryGB).sum ) | |
$PhysicalMemory = [math]::round( $Object.ExtensionData.Summary.TotalMemory / 1073741824,1 ) | |
$MemoryUsage = [math]::round( ($AllocatedVMMemoryGB / $PhysicalMemory) * 100 ,1 ) | |
# Create Global Report | |
$SizingReport = [PSCustomObject] @{ | |
HAEnabled = $Object.HAEnabled | |
DrsEnabled = $Object.DrsEnabled | |
ActiveVMs = $ClusterVMsPoweredOn.count | |
VMs = $ClusterVMs.count | |
VMsAvgCPU = $VMAvgCPUs | |
VMsAvgMemGB = $VMAvgMemGB | |
Hosts = $Object.ExtensionData.Summary.NumHosts | |
HostsAverageMemoryUsageGB = $HostsAverageMemoryUsageGB | |
HostsAverageMemoryUsagePercent = "$HostsAverageMemoryUsage %" | |
HostsAverageCpuUsageMhz = $HostsAverageCpuUsageMhz | |
HostsAverageCpuUsagePercent = "$HostsAverageCpuUsage %" | |
ClusterPhysicalMemoryGB = $PhysicalMemory | |
ClusterAllocatedMemoryGB = $AllocatedVMMemoryGB | |
ClusterAllocatedMemoryPercentage = "$MemoryUsage %" | |
ClusterPhysicalCPUCores = $CpuCores | |
ClusterLogicalCPUThreads = $LogicalThreads | |
ClusterAllocatedCPU = "$vCPUlCPUratio : 1" #Logical Threads | |
ClusterPhysicalCPUMHz = $CpuTotalMhz | |
ClusterUsedCPUMHz = $CpuDemandMhz | |
ClusterUsedCPUPercentage = $CPUUsage | |
} | |
$MyView += $SizingReport | |
} | |
} | |
End { | |
$MyView | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment