Get-Content -Path .\vcenters.txt
-PipelineVariable vcName
|ForEach-Object -Process {
Connect-VIServer -Server $vcName
$esx = Get-VMHost -Server $vcName -State Maintenance
Get-VIEvent -Entity $esx -MaxSamples ([int]::MaxValue) |
where{$_ -is [VMware.Vim.EnteredMaintenanceModeEvent]} |
Group-Object -Property {$_.Host.Name} -PipelineVariable group |
ForEach-Object -Process {
Get-VMHost -Name $group.Name |
Select Name,State,NumCpu,MemoryTotalGB,Version,
@{N='vCenter';E={$vcName}},
@{N='Cluster';E={(Get-Cluster -VMHost $_).Name}},
@{N='UptimeDays';E={[int](New-TimeSpan -Start $_.ExtensionData.Runtime.BootTime -End (Get-Date)).TotalDays}},
@{N='Entered MM';E={
$group.Group | Sort-Object -Property CtreatedTime -Descending |
Select -First 1 | Select -ExpandProperty CreatedTime
}}
}
Disconnect-VIServer -Server $vcName -Confirm:$false
} | Export-Csv -Path .\report.csv -NoTypeInformation -UseCulture
$sMail = @{
To = 'me@domain'
From = 'report@domain'
Subject = 'Maint report'
SmtpServer = 'mail.domain'
BodyAsHtml = $true
Body = Import-Csv -Path .\report.csv -UseCulture | ConvertTo-Html |Out-String
}
Send-MailMessage @sMail