在同一网络上设置了两台
Windows 7计算机.
我启用了所需的一切,以便他们可以与winrm进行通信.
我启用了所需的一切,以便他们可以与winrm进行通信.
当我运行以下命令时:
Invoke-Command -ComputerName REMOTE-PC -ScriptBlock {Start-Process calc.exe}
它工作正常,但远程计算机上永远不会看到该程序.据我所知,这是预期的行为.
按照设计,您实际上不应该能够在其他人的会话中启动进程.
(为了澄清,即使您在计算机桌面上以交互方式登录,并且使用相同的凭据同时使用另一个单独的网络登录到同一台计算机,这些仍然会被视为两个不同的登录会话.)
这仅仅是针对Windows本身的安全模型,并且试图颠覆它将是不受欢迎的.所以你不可能找到一种简单,可支持的方式来做到这一点.它在技术上是可行的,但它涉及作为本地系统运行,复制另一个登录用户的安全令牌,以及使用该备用令牌启动进程.你需要Windows API,这几乎是Powershell不擅长的唯一东西.有关详细信息,请参阅Windows API中的WTSQueryUserToken和CreateProcessAsUser.
另一个想法是,为了不在您的Cheerios中完全撒尿,您可以通过远程创建启动该过程的计划任务来实现此目的.有关详细信息,请参阅http://blogs.technet.com/b/heyscriptingguy/archive/2005/09/06/how-can-i-remotely-start-an-interactive-process.aspx.
编辑:哦,我忘了…非常确定带有-i参数的PsExec可以做到这一点.您必须提供登录会话ID.并有权执行此操作.它很可能使用我提到的相同Windows API,它利用了PsExec安装作为本地系统运行的临时服务的事实.