Menu

Virtual Geek

Tales from real IT system administrators world and non-production environment

Automating VMware ESXi Cluster Admission Control Report Insights with PowerCLI

This PowerCLI script retrieves detailed information about VMware Cluster High Availability (HA) and Admission Control policies. It is extremely useful for system administrators and auditors who need to verify that cluster settings comply with engineering or governance standards.

By running this script, you can easily generate a report that displays HA, DRS, and Admission Control configurations across all VMware clusters — helping ensure consistency, compliance, and operational readiness.

PowerCLI output showing Get-Cluster command results, including cluster name, HA, DRS, and Admission Control status, A screenshot demonstrating the execution of a VMware PowerCLI command (likely Get-Cluster piped to Select-Object) used to quickly audit vSphere cluster configurations. The output clearly displays the Cluster Name, whether HAEnabled (High Availability) and DrsEnabled (Distributed Resource Scheduler) are set to True/False, and the HAAdmissionControlEnabled status. This is a common method for system administrators to perform a quick health check and compliance audit on their vSphere environment..

Download this Get-VMwareClusterHAInformation.ps1 script here or it is also available on github.com.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
Import-Module VMware.VimAutomation.Core 
Connect-VIServer -Server marvel.vcloud-lab.com -User administrator@vsphere.local -Password Computer@123

$clusterInfo = Get-Cluster #| Where-Object {$_.Name -eq 'SomeName'}
$completeClusterInfo = @()
foreach ($cluster in $clusterInfo)
{
    $esxis = $cluster | Get-VMHost
    $totalESXis = $esxis.Count
    $connectedESxis = $esxis | Where-Object {$_.ConnectionState -eq 'Connected'}
    $poweredOnESXis = $esxis | Where-Object {$_.PowerState -eq 'PoweredOn'}
    $allClusterInfo = $cluster | Select-Object Name, 
        @{Name='Total_Esxi_Count'; Expression={$totalESXis}}, HAEnabled, HAAdmissionControlEnabled, #HAFailoverLevel
        @{Name='Connected_Esxi_Count'; Expression={$connectedESxis.Count}},
        @{Name='PoweredOn_Esxi_Count'; Expression={$poweredOnESXis.Count}},
        @{Name='Host_Failures_Cluster_Tolerates'; Expression={$_.ExtensionData.Configuration.DasConfig.AdmissionControlPolicy.FailOverLevel}},

        @{Name='Define_Host_Failover_Capacity_By'; 
            Expression = {
                switch ($_.ExtensionData.Configuration.DasConfig.AdmissionControlPolicy.GetType().Name)
                {
                    'ClusterFailoverResourcesAdmissionControlPolicy' {'Cluster Resource Percentage (R)'; break}
                    'ClusterFailoverHostAdmissionControlPolicy' {'Dedicated Failover Host (H)'; break}
                    'ClusterFailoverLevelAdmissionControlPolicy' {'Soft Policy / Disabled (s)'; break}
                } #switch ($_.ExtensionData.Configuration.DasConfig.AdmissionControlPolicy.GetType().Name)
            } #Expression = {
        }, #@{Name='Define_Host_Failover_Capacity_By';
        @{Name='Override_calculated_failover_capacity'; Expression={-not($_.ExtensionData.Configuration.DasConfig.AdmissionControlPolicy.AutoComputePercentages)}},
        @{Name='Reserved_failover_CPU_capacity'; Expression={$_.ExtensionData.Configuration.DasConfig.AdmissionControlPolicy.CpuFailoverResourcesPercent}},
        @{Name='Reserved_failover_Memory_capacity'; Expression={$_.ExtensionData.Configuration.DasConfig.AdmissionControlPolicy.MemoryFailoverResourcesPercent}},
        @{Name='Reserve_Persistent_Memory_failover_capacity'; Expression={$_.ExtensionData.Configuration.DasConfig.AdmissionControlPolicy.PMemAdmissionControlEnabled}},
        @{Name='Override_calculated_Persistent_Memory_failover_capacity'; Expression={-not($_.ExtensionData.Configuration.DasConfig.AdmissionControlPolicy.AutoComputePMemFailoverResourcesPercent)}},
        @{Name='Reserve_Percentage_of_Persistent_Memory_capacity'; Expression={$_.ExtensionData.Configuration.DasConfig.AdmissionControlPolicy.PMemFailoverResourcesPercent}},
        @{Name='Performance_degradation_VMs_tolerate'; Expression={$_.ExtensionData.Configuration.DasConfig.AdmissionControlPolicy.ResourceReductionToToleratePercent}},
        @{Name='ESXi_Names'; Expression={$esxis.Name -Join ','}}

        $completeClusterInfo += $allClusterInfo
} #foreach ($cluster in $clusterInfo)

$completeClusterInfo

Useful Article
VMWare Powercli: Time Configuration (NTP - Network Time Protocol) on multiple Esxi server
vSphere PowerCLI - Configure syslog on VMware ESXi hosts and Enable security profile firewall
Part 1: VMware Powercli : Gather distributed virtual switch information to JSON file to migrate standard switch
Part 2: Copy or clone distributed virtual switch portgroups to standard switch portgroups - Powercli
Part 3: VMware Powercli: Migrate VMs to another network
Powercli GUI: Determine the EVC Mode that vmware cluster should be configured
vMotion from all VMs on selected Esxi Host to other Esxi host via PowerCLI GUI
Powercli Get vCenter licenses information
Powercli Get vCenter assigned licenses report
PowerCLI one-liner Reporting, Chaning, Assigning and Removing licenses on ESXi
PowerCLI Get-VMhost The operation on computer failed The WinRM client cannot process the request
PowerCLI Add a SCSI Controller to a Virtual Machine
Powershell vCenter server Rest API create and assign tag and tagcategory
PowerCLI create, modify and assign tag and tagcategory
PowerCLI oneliner get the list of users and groups from vCenter SSO
PowerCLI Connect-VIServer Error: Invalid server certificate. Use Set-PowerCLIConfiguration to set the value for the InvalidCertificateAction

Go Back

Comment

Blog Search

Page Views

13509487

Follow me on Blogarama