Set up NTP on all esxi hosts using PowerShell

To configure Network Time Protocol (NTP) on all ESXi hosts using PowerShell, you would typically use the PowerCLI module, which is a set of cmdlets for managing and automating vSphere and ESXi.

Here’s a step-by-step explanation of how you would write a PowerShell script to configure NTP on all ESXi hosts:

  1. Install VMware PowerCLI: First, you need to have VMware PowerCLI installed on the system where you will run the script.
  2. Connect to vCenter Server: You’ll need to connect to the vCenter Server that manages the ESXi hosts.
  3. Retrieve ESXi Hosts: Once connected, retrieve a list of all the ESXi hosts you wish to configure.
  4. Configure NTP Settings: For each host, you’ll configure the NTP server settings, enable the NTP service, and start the service.
  5. Apply Changes: Apply the changes to each ESXi host.
# Import VMware PowerCLI module
Import-Module VMware.PowerCLI

# Connect to vCenter Server
$vcServer = 'vcenter.yourdomain.com'
$vcUser = 'your-username'
$vcPass = 'your-password'
Connect-VIServer -Server $vcServer -User $vcUser -Password $vcPass

# Retrieve all ESXi hosts managed by vCenter
$esxiHosts = Get-VMHost

# Configure NTP settings for each host
foreach ($esxiHost in $esxiHosts) {
    # Specify your NTP servers
    $ntpServers = @('0.pool.ntp.org', '1.pool.ntp.org')

    # Add NTP servers to host
    Add-VMHostNtpServer -VMHost $esxiHost -NtpServer $ntpServers

    # Get the NTP service on the ESXi host
    $ntpService = Get-VMHostService -VMHost $esxiHost | Where-Object {$_.key -eq 'ntpd'}

    # Set the policy of the NTP service to 'on' and start the service
    Set-VMHostService -Service $ntpService -Policy 'on'
    Start-VMHostService -Service $ntpService -Confirm:$false
}

# Disconnect from vCenter Server
Disconnect-VIServer -Server $vcServer -Confirm:$false

Explanation:

  • Import-Module: This imports the VMware PowerCLI module.
  • Connect-VIServer: This cmdlet connects you to the vCenter server with your credentials.
  • Get-VMHost: Retrieves all ESXi hosts managed by the connected vCenter server.
  • Add-VMHostNtpServer: Adds the specified NTP servers to each host.
  • Get-VMHostService: Retrieves the services from the ESXi host, filtering for the NTP service (ntpd).
  • Set-VMHostService: Configures the NTP service to start with the host (policy set to ‘on’).
  • Start-VMHostService: Starts the NTP service on the ESXi host.
  • Disconnect-VIServer: Disconnects the session from the vCenter server.

Before running the script, make sure to replace vcenter.yourdomain.com, your-username, and your-password with your actual vCenter server’s address and credentials. Also, replace the NTP server addresses (0.pool.ntp.org, 1.pool.ntp.org) with the ones you prefer to use.

Note: Running this script will apply the changes immediately to all ESXi hosts managed by the vCenter. Always ensure to test scripts in a controlled environment before running them in production to avoid any unforeseen issues.

Leave a comment