我想远程启动一个应用程序。 我正在使用以下PsExec命令:
PsExec \\computerOne -u Domain\User1 -p 123456 -x "C:\Windows\System32\calc.exe"
我试图使用-i,以便程序与桌面交互:
PsExec \\computerOne -u Domain\User1 -i 123456 -x "C:\Windows\System32\calc.exe"
但是这不起作用。 第二个例子的错误是:
在计算机上退出calc.exe,错误代码为-1073741502“
如果我省略了规范并且只是写了exe的path,这个过程被列在taskmanager中,但是我看不到任何UI。 我是否需要更改我要启动程序的桌面上的任何设置?
你所看到的可能是会话0隔离的效果 – psexec在远程机器上安装并启动一个新的服务,但是它启动你的进程的默认会话是0,因此当前login的用户不可用至less从Windows Vista / Server 2008开始)。 您需要在-i
参数之后指定会话编号 。 您可以事先使用quser /SERVER:computerOne
命令查询当前login的用户(及其会话编号)。
对于快速和肮脏的testing,您可以假定第一个交互式login用户的会话ID是“1”。
你也可以取出-x并replace为-I,它应该打开PsExec \ computerOne -u Domain \ User1 -p 123456 -i“C:\ Windows \ System32 \ calc.exe”
根本原因似乎是由Microsoft.powershell.consolehost.dll
的Console.Write
方法生成的泄漏句柄。 hex中的-1073741502退出码是0xC0000142(status_dll_init_failed)。
这似乎是孤立的Windows 7&2008(按照微软的KB2701373 )。
注意:互联网上其他地方的一些“修复”是由于做了一些神奇的咒语,然后closuresPowerShell并打开一个新的实例。 但是,“重新启动”PowerShell实际上是暂时解决了这个问题。