powershell 可通过 winrm 远程执行 w32tm 命令批量同步多台 windows 服务器时间,需先启用 psremoting、配置内网 ntp 源(如域控制器)、重启 w32time 服务并强制同步,最后批量验证状态。
powershell 可以高效、安全地批量同步多台 windows 服务器的系统时间,核心是调用 w32tm 工具并结合远程执行能力,无需第三方软件。
确认目标服务器已启用 WinRM
PowerShell 远程管理(WinRM)是批量操作的前提。在每台目标服务器上需确保服务运行且配置允许远程命令:
- 以管理员身份运行 PowerShell,执行:
Enable-PSRemoting -Force - 检查状态:
Test-WsMan ServerName(将 ServerName 替换为实际主机名或 IP) - 如遇防火墙拦截,可临时启用规则:
Set-NetFirewallRule -Name "WINRM-HTTP-In-TCP" -Enabled True
指定可靠的时间源并强制同步
避免使用默认时间源(如 time.windows.com),推荐配置企业内网 NTP 服务器(如域控制器或专用 NTP 服务):
- 设置时间源(示例指向域控制器 dc01):
w32tm /config /syncfromflags:manual /manualpeerlist:"dc01.contoso.local" /reliable:yes /update - 重启 Windows Time 服务生效:
net stop w32time && net start w32time - 立即强制同步一次:
w32tm /resync /force
批量执行时间同步脚本
在管理机上编写脚本,对服务器列表逐台执行时间配置与同步:
- 准备服务器列表(如 servers.txt,每行一个主机名)
- 运行以下脚本(注意替换 NTP 地址和文件路径):
$servers = Get-Content "C:\scripts\servers.txt"
foreach ($server in $servers) {
Invoke-Command -ComputerName $server -ScriptBlock {
w32tm /config /syncfromflags:manual /manualpeerlist:"dc01.contoso.local" /reliable:yes /update
net stop w32time
net start w32time
w32tm /resync /force
}
} - 添加错误捕获(可选):
在Invoke-Command后加-ErrorAction SilentlyContinue并用$Error[0]检查失败项
验证同步结果与持续监控
同步后建议快速验证,并考虑加入定期维护机制:
- 检查单台状态:
w32tm /query /status(关注 “Source” 和 “Last Successful Sync Time”) - 批量验证可用:
Invoke-Command -ComputerName $servers -ScriptBlock { w32tm /query /status | Select-String "Source|Sync" } - 如部署在域环境中,确保所有服务器以域控制器为时间源,且 PDC 模拟器本身已校准至外部权威 NTP
- 可将同步脚本设为计划任务(如每周日凌晨执行),但生产环境更推荐依赖域时间层次结构自动同步











