我的一台VM服务器比我们的DC服务器提前6个小时。不幸的是,我们不能像这样同步时间,因为一次6个小时会影响同一台服务器上收集的历史数据。所以我们需要每1分钟与服务器同步2秒。(我知道这会花费很长时间,但这样不会影响收集的历史数据)。
我想知道是否有一个PowerShell脚本来实现这一点,也许通过批处理文件调度。
任何帮助将不胜感激,并提前表示感谢。
我尝试了一个PowerShell脚本,但它只是同步时间。TimeSync.bat
包含:
@ECHO OFF
SET ThisScriptsDirectory=%~dp0
SET PowerShellScriptPath=%ThisScriptsDirectory%TimeSync.ps1
PowerShell -NoProfile -ExecutionPolicy Bypass -Command "& {Start-Process PowerShell -ArgumentList '-NoProfile -ExecutionPolicy Bypass -File ""%PowerShellScriptPath%""' -Verb RunAs}";
TimeSync.ps1
包含:
Set-Date -Adjust (New-TimeSpan -Seconds -5)
EXIT
1条答案
按热度按时间mwngjboj1#
不需要使用批处理脚本并将其全部作为PowerShell脚本;您可以单独使用PowerShell脚本。
下面是一个PowerShell脚本,您只需运行一次,它将继续运行,直到本地计算机时间赶上从www.example.com提取的时间Google.com,然后脚本将退出。
如果需要,您还可以在Google的Web请求周围添加一些错误处理和Date头的解析,否则脚本可能会在无法到达Google时提前终止。
无论您使用哪个用户来运行脚本,都可能需要保持登录状态,直到脚本完成,因为注销可能会终止用户的PowerShell进程。如果需要,您可能可以作为系统帐户运行它。
希望这能帮上忙。
从其他服务器获取时间
如果您不想从Google获取DateTime,而是想从网络上的另一台服务器检索它,您可以使用以下命令:
使用
$otherServerDate
代替$internetDate
。这假定运行脚本的服务器和另一个时间服务器位于同一个网络上,并且打开了必要的端口,并且运行脚本的帐户具有连接到另一个时间服务器的权限。如果需要,可以使用
-Credentials
参数提供具有访问权限的不同帐户。