由于我在网上找不到合适的解决方案,我会问这里.
我有一堆计算机,我想执行一个程序,并向当前登录的用户显示程序GUI.使用Powershell无法实现这一点(停止/启动Windows服务没问题)我无法通过PsExec.exe完成此操作.
我的PsExec命令看起来像这样 – 在TaskManager中可以看到calc.exe但我看不到GUI.
C:\Users\Administrator.DEV\Desktop>PsExec.exe -i \\TEST-CLI-01 -u localUser -p userPassword -d calc.exe
简短设置说明:
服务器:MS Server2012R2
客户端:Windows 8.1
每个系统都是AD域的一部分.
任何人都有一个想法,我怎么能做到这一点?
很多事先提前:)
你会发现这是非常困难的,如果不是不可能的话.你会认为这很容易,但事实并非如此.如果你可以在另一个用户的安全上下文中操作窗口管理器,那么微软就有意地使这一点变得困难,因为它暴露了一种安全漏洞(“破碎”攻击).
Windows Vista中引入的Session 0 Isolation功能使服务程序(如PsExec)难以与控制台进行交互.当交互式服务检测服务运行时,当服务尝试与控制台交互时,将提示用户切换到安全桌面以与服务的GUI交互.
有一些discussion on Stackoverflow可以深入了解架构的细节.
处理此问题的更好方法是让用户运行一个侦听某种类型的进程间通信并相应操作的进程.如果你真的想要真正的hackish,你可以运行一个简单的VBScript或Powershell脚本,它位于后台,当用户登录时,等待文件/注册表项/ TCP连接/等,然后采取行动.你可以很快将这样的东西拼凑起来作为概念验证.