在对无响应的远程 Windows Server VM 进行电源循环之前应尝试的操作

在对无响应的远程 Windows Server VM 进行电源循环之前应尝试的操作

我有一些 Server 2012r2 主机(所有远程 QEMU/KVM 虚拟机)对新会话请求没有响应:无法 RDP Enter-Pssession -ComputerName、、Invoke-Command -ComputerName甚至Restart-Computer -ComputerName

甚至连他们的控制台都似乎“冻结”了他们死亡的日期和时间。发送 Ctrl-Alt-Del 毫无作用。从虚拟机管理器控制台“重新启动”(可选通过 ACPI 或 QEMU 代理执行)在两种情况下都失败。

有趣的是,其他大部分功能都继续正常工作:文件共享、DHCP/DNS 服务、NTDS(两个是 DC)、Web 服务、SQL 数据库都继续正常工作。因此,可能要过几个月我才有理由登录这些系统,却发现我无法登录。

还要注意的是,可以使用SC、services.msc Get-Service、 等远程访问服务。同样Get-Process也可以使用。但是,由于缺少进程命令语法,因此Get-WMIObjectGet-CimInstance都不太有用。Get-Process

停止/重新启动服务效果不佳:依赖服务经常挂起。重新启动 NETLOGON 和停止 NTDS 就是这种情况。

我觉得尝试 Sysinternals 的建议PSEXEC很令人兴奋,因为我记得它会在目标上安装一个临时服务来执行命令。唉,服务安装了,但启动时挂起了。

我选择了这个WINRS建议作为答案,尽管我还不能说它对我有用——遗憾的是,我已经重启了所有挂起的服务器。但是这个“在此之前还有一件事要尝试...”。希望能发布更多内容。

答案1

只要不需要联系挂起的特定 Windows 组件,一切都将继续工作。这听起来有点像任何加载/卸载用户配置文件的尝试都挂起。

如果您可以使用sc.exe或 Get-Service,则使用它来安全地停止系统上运行的任何“数据库”服务(如果可能,包括邮件服务器和 NTDS)——或者通过数据库管理工具执行相同操作。之后,只需拔掉电源插头即可,这几乎是安全的;文件系统将恢复。

请注意,如果系统设置了 PSRemoting,那么它们也会设置通过 WinRM 承载的另一种协议 - 您可以使用该winrs工具直接运行远程 cmd.exe 命令(有点类似于 PSEXEC,但依赖于现有内容,不需要启动任何新服务)。

看看使用带有选项(“不加载配置文件”)和不带有该选项的“winrs”之间是否有任何区别会很有趣-nop。(PSRemoting 可能会挂起,因为它总是加载用户的远程配置文件,但 winrs 可以跳过这一步。)

C:\>  winrs -r:db01.example.com -nop dir
C:\>  winrs -r:db01.example.com dir

以这种方式运行不太可能shutdown有用;它会因为与基于 RPC 的远程关机相同的原因而挂起。

当缺少任何类型的控制台访问权限时,我用来强制远程桌面重新启动的一种方法是远程执行taskkill“关键”进程之一(例如 Winlogon),这会导致立即出现 BSOD 并自动重启。

C:\>  winrs -r:db01 -nop tasklist
C:\>  winrs -r:db01 -nop taskkill /f /im winlogon.exe
C:\>  tasklist /s db01
C:\>  taskkill /s db01 /f /im winlogon.exe

相关内容