如何检查系统当前的 NTP 配置?

Isz*_*szi 80 windows command-line date-time ntp batch-file

我需要在某些 Windows 系统上验证当前的 NTP 配置。理想情况下,我希望能够通过命令行执行此操作,而不是在配置屏幕中导航。

(我正在处理几个不同的操作系统版本,并且配置屏幕在不同版本之间往往并不总是位于同一位置。)

我希望找到一个快速、令人难忘的命令,我可以将它打入 CMD 控制台以获得结果。不过,我可以随身携带的批处理文件也可以。

具体来说,我需要以下内容:

  • 显示系统是否配置为从 NTP 服务器接收时间。
  • 显示系统正在从中接收时间的 NTP 服务器。
  • 显示上次同步的时间。
  • 在系统上显示当前时间。

实现这些结果需要什么命令?

寻找与 Windows XP、7、Server 2003 和 Server 2008 交叉兼容的解决方案。

Phi*_* R. 93

在命令行中,键入

w32tm /query /configuration
w32tm /query /status
Time /T 
Run Code Online (Sandbox Code Playgroud)

w32tm /query /configuration 为您提供已设置的配置。

w32tm /query /status 为您提供信息,例如:

  • 地层
  • 飞跃指示器
  • 精确
  • 上次同步
  • NTP服务器
  • 轮询间隔

time /T 输出当前系统时间。

注意:w32tm /query首先在 Windows Vista 和 Windows Server 2008 的 Windows 时间客户端版本中可用。请参阅Windows 时间服务工具和设置

  • 对 XP 没有好处。“命令 /query 未知。” (6认同)
  • 你需要在一个提升的命令窗口中。 (4认同)

小智 20

这回答了您的最后一个问题:

打开命令提示符并准确键入:

w32tm /stripchart /computer:NTPServerNameOrIP /dataonly /samples:x (你想要多少回报)

它将时间和差异返回到 NTP 服务器时间。如果它返回 time, error: 0x80072746 那么那不是您的 NTP 服务器。

命令的示例如下:

命令示例


msb*_*msb 10

我试过:

w32tm /query /status
Run Code Online (Sandbox Code Playgroud)

我有:

The command /query is unknown.
Run Code Online (Sandbox Code Playgroud)

在另一台机器上,我得到:

The following error occurred: The service has not been started. (0x80070426)
Run Code Online (Sandbox Code Playgroud)

然后我尝试:

reg QUERY [\\machine\]HKLM\SYSTEM\CurrentControlSet\Services\W32Time
Run Code Online (Sandbox Code Playgroud)

我有:

ERROR: The system was unable to find the specified registry key or value.
Run Code Online (Sandbox Code Playgroud)

然后我尝试:

net time /querysntp
Run Code Online (Sandbox Code Playgroud)

我有:

This computer is not currently configured to use a specific SNTP server.
Run Code Online (Sandbox Code Playgroud)

在另一台机器上,我得到了帮助页面,还说:

The /QUERYSNTP and /SETSNTP options have been deprecated. Please use w32tm.exe to configure the Windows Time Service.
Run Code Online (Sandbox Code Playgroud)

所以,基本上,服务没有运行。按照这些说明,我做了:

w32tm /unregister
w32tm /unregister
w32tm /register
net start w32time
Run Code Online (Sandbox Code Playgroud)

最后,以上所有方法都会起作用。(注意:如果net start失败,见下文)然后我只需要设置我的 ntp ......我做到了:

w32tm /config /manualpeerlist:10.0.0.5 /syncfromflags:manual /reliable:yes /update
Run Code Online (Sandbox Code Playgroud)

按照此处的说明进行操作,但也许它可以像以下一样简单:

net time /setsntp:10.0.0.5
Run Code Online (Sandbox Code Playgroud)

按照这里的指示。(10.0.0.5 是我的本地 NTP 服务器)。如果您不使用本地 NTP 服务器,则可以使用通用服务器:

w32tm /config /manualpeerlist:pool.ntp.org /syncfromflags:manual /reliable:yes /update
Run Code Online (Sandbox Code Playgroud)

最后,您可能需要执行以下操作,这对我来说不是必需的:

w32tm /config /update
w32tm /resync /rediscover
Run Code Online (Sandbox Code Playgroud)

注意:如果net start w32time失败并出现错误 1290(服务启动失败,因为同一进程中的一个或多个服务具有不兼容的服务 SID 类型设置),请按照此处的步骤操作:

w32tm /unregister
w32tm /register
sc config w32time type= own
net start w32time
Run Code Online (Sandbox Code Playgroud)

然后按照上面的操作。


注2:如果NTP服务不会自动重新启动上启动,这可能是由于它的启动设置,描述在这里:根据您的Windows,它可能被设置为开机,只有当它加入一个域。您可以通过以下方式检查:

sc qtriggerinfo w32time
Run Code Online (Sandbox Code Playgroud)

如果它配置为在您加入域时启动,而您的计算机中没有设置域,则它不会启动服务并设置时间。它可能不会加入域,因为您不希望它加入。无论如何,只需更改启动它的触发器即可。例如,要在机器有网络(因此能够访问服务器)时启动,请执行以下操作:

sc triggerinfo w32time start/networkon stop/networkoff
Run Code Online (Sandbox Code Playgroud)


小智 5

用:

net stop w32time
w32tm /config /syncfromflags:manual /manualpeerlist:"0.it.pool.ntp.org 1.it.pool.ntp.org 2.it.pool.ntp.org 3.it.pool.ntp.org"
net start w32time
w32tm /config /update
w32tm /resync /rediscover
Run Code Online (Sandbox Code Playgroud)

.bat 示例文件位于https://gist.github.com/thedom85/dbeb58627adfb3d5c3af

我也推荐这个程序:http : //www.timesynctool.com/


osi*_*hra 4

从命令行您可以获得如下信息:

reg QUERY [\\machine\]HKLM\SYSTEM\CurrentControlSet\Services\W32Time\Parameters
reg QUERY [\\machine\]HKLM\SYSTEM\CurrentControlSet\Services\W32Time\Config
Run Code Online (Sandbox Code Playgroud)

看来,如果我理解你的问题,至少应该足以朝这个方向前进。AFAIK,只要您运行了正确的服务,“reg”命令就可以在所有这些不同的平台上运行。