Hi LucD, This works perfect for single ESXi server.
But if i run for entire VCenter (around 140 host) its keep on running. May be the while loop somewhere getting struck.
$esx = Get-VMHost
Get-VIEvent -Entity $esx -MaxSamples 99999 -Start (Get-Date).AddDays(-7) |
#Get-VIEvent -Entity $esx -MaxSamples ([int]::MaxValue) -Start (Get-Date).AddDays(-7) |
Where-Object { "HostConnectionLostEvent", "HostConnectedEvent" -contains $_.GetType().Name } |
Group-Object -Property { $_.Host.Name } -PipelineVariable group |
ForEach-Object -Process {
$events = $group.Group | Sort-Object -Property { $_.CreatedTime.DateTime }
$i = 0
while ($i -lt $events.Count) {
while ($events[$i] -isnot [VMware.Vim.HostConnectionLostEvent]) {
$i++
}
$disconnect = $events[$i]
$i++
while ($events[$i] -isnot [VMware.Vim.HostConnectedEvent]) {
$i++
}
$connect = $events[$i]
New-Object PSObject -Property ([ordered]@{
HostName = $group.Name
Disconnected = $disconnect.CreatedTime.ToString('MM/dd/yy HH:mm')
Connected = $connect.CreatedTime.ToString('MM/dd/yy HH:mm')
Outage = (New-TimeSpan -Start $disconnect.CreatedTime -End $connect.CreatedTime).ToString("h':'m':'s")
})
$i++
}
}|
Export-Csv Disconnected_state_inVC.csv -NoTypeInformation -UseCulture
$global:DefaultVIServers | ForEach-Object { Disconnect-VIServer $_ -Confirm:$false }