几个小时后Powershell崩溃

时间:2017-05-21 07:38:46

标签: windows powershell crash powershell-v4.0

我使用我的Powershell脚本遇到了奇怪的情况。 我编写了一个执行.exe文件的脚本 这个exe运行时间约为3小时,但在2个小时后(或多或少1-2分钟)不断崩溃

我已经打破了我的脑袋,试图弄清楚为什么这个过程会崩溃 最终我发现.exe崩溃了,因为powershell崩溃了。

以下是流程执行命令:

$Proc = Start-Process -FilePath $ExePath -ArgumentList $Arguments -NoNewWindow -PassThru
$Proc | Wait-Process -Timeout 28800 -ea 0 -ev timeouted

在我通过Powershell实现此问题后,我启用了Windows PowerShell日志记录并查找错误消息"管道已停止"

enter image description here

脚本需要在进程结束后执行更多操作并获取其退出代码,这就是我使用-PassThru标志的原因。 我试图在不使用PassThru标志或Process-Wait命令的情况下运行它,结果保持不变(过程在2小时后崩溃但是没有记录消息"管道已经停止& #34)

要点:

  1. .exe文件因try而陷入困境;使用logger捕获块但在崩溃时没有记录任何内容 - 这不是.exe文件中的运行时错误
  2. 独立于命令行运行.exe后,在~3小时后成功完成
  3. Powershell脚本以管理员权限运行
  4. 由于高CPU /内存/磁盘使用率,exe不会导致崩溃。
  5. 一旦我有更多更新,我会跟进。

    感谢所有帮助者。 非常感谢您的帮助!

3 个答案:

答案 0 :(得分:0)

在我看来,Start-Process cmdlet适用于快速操作。但是,在尝试调试exe不能表现的原因时,还有很多不足之处。

要在您的情况下解决此问题,使用.Net对象重定向和更改有关实例化的某些内容可能很有用。我把一个示例函数放在我调试exe运行时遇到的麻烦之后。

var userId = $('.set-weather').attr('data-id')
$(document).on('click', '.location-btn', function(){
    console.log(setLocation)
    var data = {
        location: setLocation
    }
    console.log("/users/" + userId)
    $.ajax({
      url: '/users/' + userId,
      method: 'patch',
      dataType: "json",
      data: ({location: data}),
      success: function(result){
        console.log("Success")
      },
      error: function(result){
        console.log("failure")
      }
    })
  })

答案 1 :(得分:0)

您可以在不使用Wait-Process的情况下进行尝试,看看它是否可以重现。

带有Start-Process参数的

-Wait

或在没有-Wait的作业中创建它并使用Wait-.Job cmdlet等待作业

答案 2 :(得分:0)

尝试执行8小时的过程时,我有相同的症状,它总是会在2小时后消失,您需要清除Powershell IdleTimeout。

This answer helped me