我正在尝试使用 PSExec 在交互状态下启动远程计算机上的控制台应用程序。当我运行如下命令时:
PsExec.exe -s -d -i 1 \\MyServer notepad.exe
它可以正常启动记事本。如果我运行以下命令:
PsExec.exe -s -d -i 1 \\MyServer C:\Temp\MyConsoleApp.exe
它启动了命令窗口,但据我所知什么也没做。例如,当我在本地运行控制台应用程序时,它每 5 秒显示一次“心跳”,但当我远程运行它时,命令窗口中什么都没有显示。.exe 确实在任务管理器中显示为一个进程。有什么想法吗?
答案1
我认为您必须使用 -w 设置工作目录:
PsExec.exe -s -d -i 1 -w c:\temp \\MyServer MyConsoleApp.exe
http://technet.microsoft.com/en-us/sysinternals/bb897553.aspx
答案2
如果没有出现窗口,很可能是因为 psexec 调用中的会话 id 错误。
它被设置为 -d 标志后的数字。
您想要的 ID 号将出现在 taskmgr.exe 的“用户”选项卡上的列表的“ID”列中。它通常是 1,但也可能不是。省略该数字也会导致不出现窗口。
例如,我跑了:
psexec -i -d -s c:\windows\regedit.exe
(如其他地方所建议的)虽然我收到一条消息:“... regedit.exe 于 ... 启动,进程 ID 为 ...”,但没有出现任何窗口,尽管我可以在 taskmgr.exe 中看到它正在使用指示的进程 ID 运行。
但是,当我跑步时:
psexec -s -d -i 1 regedit.exe
窗口确实出现了。碰巧我的ID是1。
答案3
我认为您可以查看当前用户的会话 ID,并将其作为 -i 参数传递,例如:
PsExec.exe -s -d **-i 2** -w c:\temp \\MyServer MyConsoleApp.exe
要查看正确的会话 ID,您可以打开 cmd 并运行命令:查询会话有时您要为其启动进程的活动用户的会话 ID 为 2,因此请尝试查找正确的会话 ID 并将其与 -i 参数一起使用。它应该有效。它对我有用。
答案4
要查找用户的会话 ID,请在特定计算机上打开任务管理器,然后在“用户”选项卡上查找您登录的用户名。