我正在使用 C# 开发一个自动化进程,该进程将远程重启 Windows (2008/2012/2016) 服务器,我需要等到该服务器恢复在线后再继续。
我知道“返回在线”可能含糊不清,因此根据我的要求,我需要服务器返回到 Ctrl-Alt-Del 屏幕。 这样做的原因是在继续之前让服务器处于一致状态。根据我的经验,有几个因素可能会阻止服务器到达此屏幕,例如安装的 Windows 更新卡在重启周期或卡在“等待本地 session 管理器”等。
我花了几天时间研究这个问题,但无济于事:
- 服务器显然在可用之前就开始响应 ping 请求
- 系统启动时间发生在服务器达到所需状态之前
- 任何指示系统已启动的事件都会在所需状态之前记录下来
- 我不能简单地轮询基本服务 - 当 Windows 在登录之前应用计算机更新时,这些服务可能已经启动。此外,有时服务器会在这个阶段安装更新时自行重启,这可能会导致误报。
- 轮询 CPU 事件也可能产生误报或引入延迟
有没有检测到 Windows 服务器已完成启动并可用于交互式登录的方法?
最佳答案
听起来您已经涵盖了我所知道的大部分可能方法。这让我又回到了蛮力的想法。我很好奇你在做什么,你不能在盒子上安装 Windows 服务(或者因为数量而不太可行)
首先只是尝试远程登录或其他任何方式,并有一些方法来测试它是否失败,等待 1 分钟,再试一次。但似乎这可能会以某种方式给您带来副作用?
我对不影响状态的蛮力方法的想法:
- 每 1-5 秒 Ping 一次
- 一旦它开始响应
- 等待 5 或 10 甚至 15 分钟,同时仍在 ping 它
- 如果 ping 失败重置该计时器(Windows 更新重启情况)
- 然后漂亮相信您处于正确的状态。
对于可能有数千台服务器,我无法想象每台 15 分钟会有什么大不了的,特别是如果它足够一致以能够在更大的批处理中运行
关于C#:以编程方式检测 Windows Server 已启动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51411030/