远程进程被杀神秘
我正在使用PowerShell远程进程,似乎几分钟后不留痕迹被杀死。远程进程被杀神秘
我使用的命令如下:
$command = {Start-Process -NoNewWindow -Wait -FilePath $filepath -ArgumentList $args}
Invoke-Command -Session $MyPSSession -ScriptBlock $command
虽然远程desktopping机器,我看任务管理器:这个过程是在列表中,并采取尽可能多的内存和CPU资源,像往常一样(即,如果我直接在机器上执行相同的命令而不是使用Invoke-Command
),但是在3到6分钟后,过程停止,没有任何痕迹。
是否有某种方式来防止这种行为?我的流程应该平均运行很长时间(超过10分钟),无论如何它会被杀死。
编辑1:好吧,我用procmon调试了这个问题,它好像就在临死前一样,进程启动了退出代码3.我查了一下,它是“System could not find path specified”。这又是一件神秘的事情,因为直接在机器上运行这个过程不会触发这样的退出代码。
...然后会有办法知道的过程中一直在寻找哪一条路径?
编辑2:确实有一种方法可以知道进程无法访问哪个路径,但在我的情况下,procmon记录的事件有数千个(!!!)事件,结果为“NAME NOT FOUND” “RegOpenKey”等。 此外,它似乎像我的远程机器与CreateFileMapping函数,总是返回“文件锁定只有读者”,无论它尝试“映射”,无论它试图很难...
编辑3:我发现进入事先创建的会话,然后运行该过程改变了行为,但该过程在启动后仍然会被杀死,这次是退出代码'-1073741819'...这是“访问被拒绝”。将进一步调查。
编辑4:在远程计算机上,所述PSversion为2.0。在我的工作站上,PSversion为5.0。我安装了Service Pack 1,.NET Framework 4.5.2和WMF 5.0(包含PowerShell 5.0)。直到今天,这个过程运行良好,并没有神秘死亡,但现在它几秒钟后吐出一个退出代码3。我尝试在远程计算机上运行另一个应用程序:即使过程花费的时间超过了几秒钟,我也会完成并输出结果。 “那么它一定是应用程序!”我告诉自己......不行!当我从虚拟机运行相同的应用程序到我的工作站时,它工作得很好。 “那肯定是远程机器!” ...是的,关于这个。我如何能够识别这两台机器之间的差异并修复远程问题,以便我可以从我的工作站上运行我的应用程序?
在远程机器上,PSversion为2.0。在我的工作站上,PSversion为5.0。我在远程机器上安装了Service Pack 1,.NET Framework 4.5.2和WMF 4.0(包括PowerShell 4.0),然后从我的工作站远程启动了我的进程,比以往任何时候都更加健康。
结论:使用PowerShell 2.0的远程处理不是长期的进程,一个很好的解决方案,必将导致以后的问题,特别是如果接收设备运行的是旧版本的PS的。
课一周:更新你的东西,伙计们。
我想用已启动的procmon调试它的行为。临时审核流程开始/结束可能会有所帮助。以及任何关于杀死进程的信息。 – Vesper
感谢您的提示,只是更新了问题 –
不错。 Procmon日志应包含对该进程的访问失败尝试或在您的脚本或任务内启动的线程,该尝试在枚举文件夹时返回Windows错误0x03。检查目标系统上是否缺少一些硬编码路径。 – Vesper