远程过程被神秘地杀死

时间:2017-06-19 19:08:37

标签: powershell powershell-remoting

我正在使用PowerShell运行一个远程进程,几分钟后它似乎无法追踪。

我使用的命令如下:

$command = {Start-Process -NoNewWindow -Wait -FilePath $filepath -ArgumentList $args}
Invoke-Command -Session $MyPSSession -ScriptBlock $command

在对桌面进行远程桌面操作时,我查看了任务管理器:该过程位于列表中并占用了与往常一样多的内存和CPU资源(即好像我直接在机器上执行相同的命令而不是使用{ {1}}),但在3到6分钟后,该过程停止,没有任何痕迹。

有什么方法可以阻止这种行为吗?我的过程应该平均运行很长时间(超过10分钟)并且无论如何都会被杀死。

编辑1:好吧所以我用procmon调试了这个问题,似乎就在死亡之前,这个过程启动了一个退出代码3.我查了一下,它就是"系统无法找到指定的路径&# 34 ;.这又是神秘的,因为直接在机器上运行进程不会触发这样的退出代码。

...那么有没有办法知道这个过程正在寻找哪条路径?

编辑2:确实有一种方法可以知道进程无法访问哪条路径,但在我的情况下,procmon记录的数千(!!!)个事件有结果" NAME NOT FOUND&# 34;在操作" RegOpenKey"等等。 此外,似乎我的远程计算机很难使用CreateFileMapping函数,该函数始终返回" FILE LOCKED WITH ONLY READERS",无论它在哪个地方尝试" map&# 34; ...

编辑3:我发现进入事先创建的会话然后运行该过程改变了行为,但是这个过程在启动后仍然会被杀死一段时间,这次退出代码为' -1073741819&# 39; ...这是"访问被拒绝"。将进一步调查。

编辑4:在远程计算机上,PSversion为2.0。在我的工作站上,PSversion是5.0。我安装了Service Pack 1,.NET Framework 4.5.2和WMF 5.0(包含powerShell 5.0)。直到今天,这个过程运行良好并且并没有神秘地消失,但是现在它在几秒钟后吐出退出代码3。我试图在我的远程计算机上运行另一个应用程序:即使进程花费的时间超过这几秒钟,我也可以完成并输出结果。 "然后它必须是应用程序!"我告诉自己......不!当我使用相同的参数从VM运行到我的工作站时,它运行得很好。 "它必须是远程机器!" ......是的,关于那个。我如何能够识别这两台机器之间的差异并修复远程机器,以便我可以从我的工作站上运行我的应用程序?

1 个答案:

答案 0 :(得分:0)

在远程计算机上,PSversion为2.0。在我的工作站上,PSversion是5.0。我在远程计算机上安装了Service Pack 1,.NET Framework 4.5.2和WMF 4.0(包括PowerShell 4.0),然后我从工作站远程启动了我的进程,它比以前更健康。

结论:使用PowerShell 2.0进行远程处理对于长期流程来说不是一个好的解决方案,并且肯定会在以后引起问题,特别是如果接收计算机运行旧版本的PS。

本周的课程:更新你的东西,伙计。