我在 Hyper-V 管理器 (Windows 2008 R2) 上有一个虚拟机,但虚拟机上没有配置网络。我想从主机 Windows 服务器上运行的 powershell 脚本查询本地虚拟机的操作系统以获取某些信息(即给定进程是否已完成)。
我正在使用 codeplex 的 pshyperv 模块(https://pshyperv.codeplex.com/) 与 Hyper-V 管理器交互,但用于连接到虚拟机的唯一 cmdlet 是“New-VMConnectSession”,它会启动与虚拟机的“vmconnect.exe”连接。由于 vmconnect.exe 本质上是 RDP,因此它不太适合脚本。
如果虚拟机上未配置网络,那么在主机的 powershell 脚本中,是否有任何方法可以向本地虚拟机的操作系统发送命令并接收输出?(我相信 Vmware 的“vmrun”实用程序具有此功能)
提出这个问题的另一种方式:Hyper-V 是否有非基于 GUI 的 vmconnect.exe 形式?
(PS:不确定这是否是 stackoverflow 或 serverfault 的问题)
答案1
vmconnect
允许客户端连接到虚拟机管理程序。它确实使用 RDP 协议,通常由虚拟机管理程序充当“服务器”。虚拟机完全不知道这种交互,它只是看到 VGA 或类似设备。在较新的操作系统上,Hyper-V 和 VM OS 都支持某些 RDP over VMbus 扩展,客户端知道该连接。但即使在这种情况下,它也不是通过“网络”连接处理的,而是通过虚拟机管理程序处理的。
没有内置方式可以按照您想要的方式进行通信。您可以编写自定义 VMbus 驱动程序,通过 Hyper-V 的虚拟总线从主机到 VM 进行通信;或者使用映射到串行端口的 naped 管道;但这两者都需要一些努力。
答案2
您的评论表明您希望能够在 VM 中运行命令,但不想要 GUI。
如果客户操作系统是某个版本的 Windows Server,则可以启用 EMS 控制台。这将导致控制台出现在虚拟机的某个串行端口上。(您选择哪一个。)然后,您可以使用 PuTTY 或其他 VT100 仿真器连接到它。从那里,您可以启动命令窗口会话并运行您喜欢的任何程序。(当然,它会强制您登录。)
有关启用 EMS 控制台的更多信息,请参阅以下内容:
当然,您也可以通过将主机升级到 Server 2012 R2 来实现这一点。然后,您可以使用 Hyper-V 在托管层使用 PowerShell 将文件放置在 VM 中。您可以在客户机中设置定期任务来运行它发现放置在那里的任何内容。