【发布时间】:2018-12-26 21:44:21
【问题描述】:
我正在使用 C# 进行自动化进程,该进程将远程重启 Windows (2008/2012/2016) 服务器,我需要等到该服务器重新联机才能继续。
我知道“重新联机”可能不明确,因此根据我的要求,我需要服务器返回 Ctrl-Alt-Del 屏幕。 这样做的原因是在继续之前让服务器处于一致状态。根据我的经验,有几个因素可能会阻止服务器到达此屏幕,例如安装 Windows 更新时卡在重启周期或卡在“等待本地会话管理器”等。
我花了几天的时间研究这个无济于事:
- 服务器显然在 ping 请求可用之前就开始响应它
- 系统启动时间发生在服务器达到所需状态之前
- 任何表明系统已启动的事件都会在所需状态之前记录
- 我不能简单地轮询一项基本服务 - 当 Windows 在登录前应用计算机更新时,这些服务可能已经启动。此外,有时服务器会在此阶段安装更新时自行重启,这可能会导致误报。
- 轮询 CPU 活动也可能产生误报或引入延迟
是否有办法检测到 Windows 服务器已完成启动并可用于交互式登录?
【问题讨论】:
-
也许将您的检测代码作为延迟启动服务运行? stackoverflow.com/questions/11015189/…
-
我忘了提到我无法在这些服务器上安装 Windows 服务。我可以创建一个可执行文件并通过 PsExec 或 PowerShell 调用。问题是检测代码是什么,我不知道如何检测所需的状态。
-
也许可以创建一个服务并将其部署到自动启动...并 ping 该服务
-
服务的问题是它可能在到达 Ctrl-Alt-Del 屏幕之前启动,因此轮询它直到它运行可能会产生误报。此外,如上所述,我无法在这些服务器上安装 Windows 服务 :(
-
您知道您可以将窗口配置为使用存储在注册表中的给定用户和密码自动登录。为什么要等待登录屏幕?