# Connect to vCenter Server
Connect-VIServer -Server <vCenter_Server_IP_Address> -User <Username> -Password <Password>
# Retrieve all VMs and datastores
$VMs = Get-VM
$Datastores = Get-Datastore
# Define the output file path
$OutputFile = "C:\EsxtopValidation.csv"
# Create an empty array to store the results
$Results = @()
# Loop through each VM
foreach ($VM in $VMs) {
$VMName = $VM.Name
# Retrieve compute metrics for the VM
$VMStats = Get-Stat -Entity $VM -Realtime -Stat cpu.usage.average,memory.usage.average
# Calculate average CPU and memory usage
$CPUUsage = $VMStats | Where-Object {$_.MetricId -eq "cpu.usage.average"} | Measure-Object -Property Value -Average | Select-Object -ExpandProperty Average
$MemoryUsage = $VMStats | Where-Object {$_.MetricId -eq "memory.usage.average"} | Measure-Object -Property Value -Average | Select-Object -ExpandProperty Average
# Create a custom object with VM compute metrics
$VMResult = [PSCustomObject]@{
VMName = $VMName
CPUUsage = $CPUUsage
MemoryUsage = $MemoryUsage
}
# Add VM compute metrics to the results array
$Results += $VMResult
}
# Loop through each datastore
foreach ($Datastore in $Datastores) {
$DatastoreName = $Datastore.Name
# Retrieve datastore metrics
$DatastoreStats = Get-Stat -Entity $Datastore -Realtime -Stat datastore.datastoreIops.average,datastore.datastoreLatency.average
# Calculate average datastore IOPS and latency
$DatastoreIOPS = $DatastoreStats | Where-Object {$_.MetricId -eq "datastore.datastoreIops.average"} | Measure-Object -Property Value -Average | Select-Object -ExpandProperty Average
$DatastoreLatency = $DatastoreStats | Where-Object {$_.MetricId -eq "datastore.datastoreLatency.average"} | Measure-Object -Property Value -Average | Select-Object -ExpandProperty Average
# Create a custom object with datastore metrics
$DatastoreResult = [PSCustomObject]@{
DatastoreName = $DatastoreName
DatastoreIOPS = $DatastoreIOPS
DatastoreLatency = $DatastoreLatency
}
# Add datastore metrics to the results array
$Results += $DatastoreResult
}
# Export the results to a CSV file
$Results | Export-Csv -Path $OutputFile -NoTypeInformation
# Disconnect from vCenter Server
Disconnect-VIServer -Server <vCenter_Server_IP_Address> -Confirm:$false
Write-Host "Esxtop validation completed. Results exported to $OutputFile."
Make sure to replace “, “, and “ with your actual vCenter Server details. Also, specify the desired output file path in the `$OutputFile` variable. This script connects to your vCenter Server, retrieves all VMs and datastores, and then uses `Get-Stat` cmdlet to fetch real-time compute metrics for each VM and datastore. It calculates the average CPU and memory usage for each VM and the average IOPS and latency for each datastore. The results are then exported to a CSV file specified in the `$OutputFile` variable. Please note that this script requires the VMware PowerCLI module to be installed on the machine where you are running the script. You can install it by running `Install-Module -Name VMware.PowerCLI` in a PowerShell session. Once you run the script, it will provide you with the path to the generated CSV file, where you can review the computed metrics for all VMs and datastores. Remember to adjust the script as per your specific requirements and environment.