Get-VMHostTimeReport Reporting time from vmhost system

by Grzegorz Kulikowski

I wanted to check if all of my vmhost system are keeping time with ntp. I wrote recently how to query time from vmhost system using esxcli. Today i want to show how to do this without esxcli, and also produce nice report and a summary which will help investigate issue with host time. I am comparing host time with local time o/s that is converted to UTC. If you are not sure whether your time is accurate then it might be a problem. Solution for this is to query remote utc time. In internet you can find sites that offer time web services that can be easily integrated to this script.
Have in mind that property DiffToUTC is in seconds.
I have tried to optimize this report as much as i can. It was possible to execute this report in 1 minute and 8 seconds. But it was not that readable and did not contain all of this information. On 100 vmhost+ it should fit in 1 – 2 minutes. Before i had approach with obtaining time using esxcli, but that was slower then this approach.
If you know how to query it faster, post a comment. Have in mind that this function is not perfect. I believe that there are better ways to show weather vmhost system is out of time or not. Anyway, this function helps a lot in diagnosing problems time on esx/esxi host systems.
It will state if ntpd is running or not, or for example if you have >100 host you can spot a pattern for ntp servers. Sometimes it is easy to overlook something, for example ntp servers:
Where you can easily see that you had a typo.
Sometimes you are just not aware that ntp service is running.
Or sometimes… 😉
Few screenshots from running this function:
From this screenshot where the report was stored in $myreport, we can see that we have some issues with host time, as there is a difference of 76 second compared to my local os time.
If you see DiffToUTC like 0.0xxxxx that would mean that you are ok. If you get readings > 1 seconds that could indicate something is wrong.
We can also do report for a single vmhost system.
We can do a full report and using the -summary switch, make function to return some description about the report.
Documentation for
HostDateTimeSystem -> Managed Object – HostDateTimeSystem
HostServiceSystem -> Managed Object – HostServiceSystem
I have added now option to check your local time which will be converted to UTC and compare it to UTC time taken from internet. Internet connection should be in place in order to use it. That was added if you suspect that your local time might not be correct and you would like to check it with other source. Please also read disclaimer,usage restrictions before using this time web service. So if you spot that your time differs to much from time taken from that ‘internet returned time’, it might indicate some issues, maybe the web service has issues, or our system.
Function below:
[sourcecode language=”powershell”]
function Get-VMHostTimeReport {
Gets time from VM Hosts and checks with local time(to utc).

This function might help investigating issues with vm host time. If it is running without any
parameter it checks time for all hosts registered in virtual center to which user is currently
connected. Using parameter SingleVMHost will produce report for single vm host system.
VMHost should be the name of the host, string.
Report returns colums : Name (vmhost system name), VMHostTime (Time from vmhost),
UTCTime (this is the utc time from our local os), NTPServers ( if any are in the vmhost
configuration), NTPServiceRunning (checks if the ntp service is running on the vmhost),
DiffToUTC (that’s the difference in seconds between time reported by vmhost and our os)
By default it sorts report by from lowest to highest time difference reported.

Specify single vmhost name that is registered in VC. This should be a string.

Indicate if you would like to receive short summary about produced report.

.PARAMETER CheckTimeFromInternet
Indicate if you would like to see in summary information about your local time and remote
time. Time from remote web service will be checked and comapred to your system utc time.

PS C:\> Get-VMHostTimeReport
Will produce report for all vmhosts that are registered within VirtualCenter to which user
is currently connected. It is possible to close the report into a variable for example:
You can then export this report to csv if needed for example, or view it again :
$timereport | format-table -autosize
For viewing convenience

PS C:\> Get-VMHostTimeReport -SingleVMHost ‘myesxhost.local.lan’
Will produce report for given vmhost that is registered within VirtualCenter to which user
is currently connected.

PS C:\> Get-VMHostTimeReport -Summary
Will produce report . and show a small summary which might indicate if there is a problem
with time sync on vmhost systems. Example of the summary below:
UTC time from the current system :Min and Max times during reporting period
Min: 9/3/2013 4:17:38 PM
Max: 9/3/2013 4:19:20 PM
While function was creating this report, first date that was returned by local os was the Min
and the last date that was returned by local os was the Max value.
VMHosts reported Times :Min and Max date / time while creating report
Min: 9/3/2013 4:16:35 PM
Max: 9/3/2013 4:19:20 PM
Our vmhost systems reported their date/time. If this time span is too big, this might indicate
issues with vmhost ntp sync.
Time Difference between VMHost and UTC from local os time Min, Max, Avg
Min: 0.03075
Max: 76.20985
Avg: 1.36604993421053
This is summary for comparing UTC vm host time to UTC time from local os. If you see
big Max value >1/2 sec that it might indicate that there is an issue with vmhost ntp time sync
If a switch parameter CheckTimeFromInternet is present in the summary section there will
be small report generated about your local time converted to UTC and time taken from
You can then quickly see if there is an issue with your local time

NAME: Get-VMHostTimeReport

AUTHOR: Grzegorz Kulikowski

NOT WORKING ? #powercli @




if ($SingleVMHost) { $VMHosts=Get-View -ViewType HostSystem -Filter @{‘name’=$SingleVMHost} }
$VMHosts=get-view -viewtype hostsystem -property name,ConfigManager.DateTimeSystem,ConfigManager.ServiceSystem -Filter @{‘runtime.ConnectionState’=’connected’}
Foreach($VMHost in $VMHosts){
$VMHostDateTimeSystem=get-view -id $VMHost.ConfigManager.DateTimeSystem
$VMHostServiceSystem=get-view -id $VMHost.ConfigManager.ServiceSystem
$NtpServiceState=($VMHostServiceSystem.ServiceInfo.Service|Where-Object {$_.Key -eq ‘ntpd’}).Running
$TimeReport+=$vmhost| Select-Object -Property Name, @{n=’VMHostTime’;e={$VMHostTime}},@{n=’UTCTime’;e={$UTCTime}},@{n=’NTPServers’;e={$NtpServers}},@{n=’NTPServiceRunning’;e={$NtpServiceState}},@{n=’DiffToUTC’;e={[Math]::Round([math]::abs(($VMHostTime – $UTCTime).TotalSeconds),5)}}
$SummaryUTCTime=$TimeReport|Measure-Object -Property UTCTime -Min -Max
$SummaryVMHostTime=$TimeReport|Measure-Object -Property VMHostTime -Min -Max
$SummaryDiffToUTC=$TimeReport|Measure-Object -Property DiffToUTC -Min -Max -Average
Write-Host “UTC time from the current system :Min and Max date/time while creating this report.”
Write-Host “Min: $($SummaryUTCTime.Minimum.ToString())”
Write-Host “Max: $($SummaryUTCTime.Maximum.ToString())”
Write-Host “VMHosts reported Times :Min and Max date/time while creating this report”
Write-Host “Min: $($SummaryVMHostTime.Minimum.ToString())”
Write-Host “Max: $($SummaryVMHostTime.Maximum.ToString())”
Write-Host “Time Difference between VMHost and UTC from local os time Min, Max, Avg”
Write-Host “Min: $($SummaryDiffToUTC.Minimum.ToString())”
Write-Host “Max: $($SummaryDiffToUTC.Maximum.ToString())”
Write-Host “Avg: $($SummaryDiffToUTC.Average.ToString())”
[datetime]$TimeFromInternet=(Invoke-RestMethod -Uri ‘’).timezone.utctime
Write-Host “We took UTC time from internet and compared it to your local time converted to UTC time”
Write-Host “Reported local time converted to UTC $CurrentSystemTimeUTC”
Write-Host “Reported time taken from internet( $TimeFromInternet”
Write-Host “Difference: $TimeDiff seconds”
return $TimeReport | Sort-Object -Property DiffToUTC

You may also like


Gary January 13, 2020 - 4:31 pm

Hi there, Nice script.

I tried to use it today and it looks like earthtools have changed there setup, so I swapped out the rest method for

(Invoke-RestMethod -Uri

Best Regards


psvmware January 14, 2020 - 11:33 am

Thank you Gary !

buyviagraonline.bigcartel.comviagra-without-a-doctor-prescription August 20, 2022 - 10:39 am

purchasing cialis on the internet

Thank you. Awesome information.

Reply August 20, 2022 - 2:30 pm

cialis pills

Nicely put. Regards!

buy viagra delhi August 20, 2022 - 10:06 pm

Viagra reviews

With thanks, Quite a lot of tips.

www.divephotoguide.comuserbuyviagraonline August 21, 2022 - 5:28 pm

cialis generico online

Awesome stuff. Many thanks.

buy viagra pills August 21, 2022 - 9:24 pm

Viagra from canada

You actually suggested that perfectly!

buy viagra delhi August 23, 2022 - 10:37 am

Viagra purchasing

Well expressed without a doubt! .

Reply August 29, 2022 - 12:30 am

cialis 20mg prix en pharmacie

Kudos! Good stuff.

where to buy viagra online August 29, 2022 - 2:45 pm

Discount viagra

Nicely put. Thanks a lot.


Leave a Reply

Chinese (Simplified)EnglishFrenchGermanHindiPolishSpanish