问题描述
我正在尝试使用 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 远程连接(或任何远程连接,如 rdp、ssh 等)发生在单独的登录会话中,并且不能真正相互交互。
有两种合理的方法可以做到这一点:
- 使用 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
- 使用在您登录时运行且可见的计划任务。您可以使用 powershell 的各种
New-ScheduledTask
命令来创建一个命令,或者按照脚本专家的 this guide 进行操作!使用 WMIWin32_ScheduledJob
方法。
请参阅 use powershell to start a gui program on a remote machine 以了解有关这两个选项的更多详细信息,并详细说明为什么在 Windows 中很难做到。