I am looking to write a script to tell me the Host Name, NTP Server, Service Running (yes or no), Policy (start with host, manual, automatic) and the time on the server. Is this possible? I have the one liner below that is pulling half of what I am looking for - although the policy piece is not pulling and I need to get the time to display.
Get-VMHost |Sort Name|Select Name, @{N=“NTPServer“;E={$_ |Get-VMHostNtpServer}}, @{N=“ServiceRunning“;E={(Get-VmHostService -VMHost $_ |Where-Object {$_.key-eq “ntpd“}).Running}},@{N=“Policy”;E={(Get-VmHostService -policy $_ |Where-Object {$_.key-eq “ntpd“})}}
Thanks
Try like this
Get-VMHost |Sort Name|
Select Name, @{N=“NTPServer“;E={$_ |Get-VMHostNtpServer}},
@{N=“ServiceRunning“;E={(Get-VmHostService -VMHost $_ |Where-Object {$_.key-eq “ntpd“}).Running}},
@{N=“Policy”;E={(Get-VmHostService -VMHost $_ | Where-Object {$_.key-eq “ntpd“} | Select -ExpandProperty Policy)}}
Blog: lucd.info Twitter: @LucD22 Co-author PowerCLI Reference
This is great!
So I added to this to also pull the current time on the server as well
Get-VMHost |Sort Name|Select Name, @{N=“NTPServer“;E={$_ |Get-VMHostNtpServer}},@{N=“ServiceRunning“;E={(Get-VmHostService -VMHost $_ |Where-Object {$_.key-eq “ntpd“}).Running}},@{Name="Time";Expression={(get-view $_.ExtensionData.configManager.DateTimeSystem).QueryDateTime()}},@{N=“Policy”;E={(Get-VmHostService -VMHost $_ | Where-Object {$_.key-eq “ntpd“} | Select -ExpandProperty Policy)}}
My question though is if I want to get this report e-mailed with the condition if the Service is not running or policy is off or time is not current - can I add that?
Thanks
You can do something like this
$ntpService = Get-VMHost | Sort Name |
Select Name, @{N=“NTPServer“;E={$_ |Get-VMHostNtpServer}},
@{N=“ServiceRunning“;E={(Get-VmHostService -VMHost $_ |Where-Object {$_.key-eq “ntpd“}).Running}},
@{Name="Time";Expression={(get-view $_.ExtensionData.configManager.DateTimeSystem).QueryDateTime()}},
@{N=“Policy”;E={(Get-VmHostService -VMHost $_ | Where-Object {$_.key-eq “ntpd“} | Select -ExpandProperty Policy)}}
$ntpError = $ntpService |
where{$_.ServiceRunning -eq $false -or $_.Policy -ne 'automatic' -or
((Get-Date).AddSeconds(-5) -lt $_.Time -and $_.Time -lt (Get-Date).AddSeconds(5))}
Send-MailMessage -From me@domain.com -To you@domain.com -Subject 'NTP issues' -Body ($ntpError | Out-String) -SmtpServer mail.domain.com
But for deciding on the time off, you will eventually have to adapt the interval (I used + and - 5 seconds).
If your ESXi nodes are in different timezones you should be comparing UTC times.
Blog: lucd.info Twitter: @LucD22 Co-author PowerCLI Reference