【问题标题】:Programs running on Hyper-V with Invoke-Command hang使用 Invoke-Command 在 Hyper-V 上运行的程序挂起
【发布时间】:2021-04-13 15:31:02
【问题描述】:

我正在尝试使用 powershell Invoke-Command 在 Hyper-V VM 上运行我的软件,但没有成功。主机操作系统 -Windows 10。来宾操作系统 - 也是 Windows 10。VM Generation 1。

我做了一些简单的实验,发现了这个:

如果我跑

Invoke-Command -VMName MY_VM -Credential $Cred -ScriptBlock { calc }

然后我可以通过 UI 看到客户机系统上启动的 calc.exe。

但如果我运行 mspaint 或任何非 Microsoft 程序,则什么也不会发生。程序只是挂在 VM TaskManager 中,没有任何影响。

我还尝试使用 CLI 以多种方式调用 Invoke-Command 来运行几个不同的程序,但得到了相同的结果。

可能是什么问题?

【问题讨论】:

    标签: powershell windows-10 hyper-v invoke-command


    【解决方案1】:

    基本的答案是,powershell 远程连接(或任何远程连接,如 rdp、ssh 等)发生在单独的登录会话中,并且不能真正相互交互。

    有两种合理的方法可以做到这一点:

    1. 使用 PsExec - microsoft sysinternals 工具组的一部分。
    # List sessions - note the session ID of the session you want the process to start in
    quser /server:$computername
    # Run a process remotely, specifying the logon ID
    PsExec.exe -s -i $ID notepad.exe
    
    1. 使用在您登录时运行且可见的计划任务。您可以使用 powershell 的各种New-ScheduledTask 命令来创建一个,或者按照脚本专家的this guide 执行此操作!使用 WMI Win32_ScheduledJob 方法。

    请参阅use powershell to start a gui program on a remote machine 了解有关这两个选项的更多详细信息,并详细说明为什么在 Windows 中很难做到这一点。

    【讨论】:

    • "...远程连接(或任何远程连接,如 rdp、ssh 等)发生在单独的登录会话中,并且不能真正相互交互" 看起来很合理,但是为什么在这种情况下我会看到 calc.exe 用户界面吗?
    • @Alex 啊,我错过了你问题的那一部分。简短的回答是操作系统对 Windows 商店应用程序 / appx 包的处理与普通应用程序有很大不同。诸如计算器/绘画 3d/地图之类的东西在相互沙盒的单独“层”中运行,并绑定到运行 UI 的 Windows 会话。我对这些应用程序不太熟悉,所以我没有更多技术性的解释,但我希望它会有所帮助。
    猜你喜欢
    • 1970-01-01
    • 2020-09-25
    • 1970-01-01
    • 2021-07-10
    • 1970-01-01
    • 1970-01-01
    • 2018-05-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多