Last week, I was asked to write up a script to check the NTP settings across all ESXi servers. The script had to output:
- Cluster
- ESXi
- IP Address (NTP server)
- Policy
- Running
It looked very straightforward but one thing wasn’t clear. During scripting, I found that the policies Get-VMHostService -VMHost <VMHost[]> | %{$_.Policy} returns were:
- On
- Off
- Automatic
So that the output looked like:
Cluster : cluster1 ESXi : esxi1.test.com NTP Server : ntp.test.com Service : NTP Daemon Policy : on Running : True
For the policy, on, off and automatic means nothing to the end-users, needed more explanations. After digging in, I discovered the following:
- On => Start and stop with host
- Off => Start and stop manually
- Automatic => Start automatically if any ports are open, and stop when all ports are closed
Hence, I used a simple switch command to translate the above:
switch ($policy) {
"off" { "Start and stop manually"}
"on" { "Start and stop with host" }
"automatic" { "Start automatically if any ports are open, and stop when all ports are closed" }
}
And the final script is:
Function NTP-Query
{
[CmdletBinding()]
param(
[Parameter(Mandatory=$true)]
[string]$cluster
)
foreach ($esxi in (Get-Cluster -Name $cluster | Get-VMHost | Sort Name)) {
$service = Get-VMHostService -VMHost $esxi | Where {$_.Key -eq "ntpd"}
$policy = switch ($service.Policy) {
"off" { "Start and stop manually"}
"on" { "Start and stop with host" }
"automatic" { "Start automatically if any ports are open, and stop when all ports are closed" }
}
$ntp = Get-VMHostNtpServer -VMHost $esxi
$esxi | Select-Object @{N="Cluster";E={$_.Parent}},
@{N="ESXi";E={$_.Name}},
@{N="NTP Server";E={$ntp}},
@{N="Service";E={$service.Label}},
@{N="Policy";E={$policy}},
@{N="Running";E={$service.Running}}
}
}
Hope this helps to those of you writing a script to check NTP settings as well as the service policy.
One thought on “PowerCLI ESXi NTP Service Query”