2017-05-21 15 views
0

Powershellスクリプトで奇妙なケースが発生しています。私は私の頭を破る必要があり、このexeファイルの実行時には約3時間である.exeファイル を実行するが、常に2つのオードブルの後にクラッシュしていますスクリプト(1~2分多かれ少なかれ)数時間後にPowershellクラッシュが発生する

を書かれている は理由を理解しようプロセスがクラッシュする 私はpowershellがクラッシュするため、クラッシュする.exeが見つかりました。ここで

は、プロセスの実行コマンドです:

$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時間後にクラッシュしましたが、「パイプラインは停止しました」というメッセージでログに記録されませんでした)

重要事項:

  1. .exeファイルを試して酸っぱくなっている。ロガーとcatchブロックが、これは.exeファイルでランタイムエラーではありません
  2. ときにcrashing-時に任意のものを記録していませんでしたコマンドラインから独立して.exeを実行すると、〜3時間後に正常に終了します。
  3. 高いCPU /メモリ/ディスク使用量にexeファイルがクラッシュケーシングされていない管理者権限
  4. で実行
  5. PowerShellスクリプト

私はかつて、私はより多くのアップデートを持ってフォローアップします。

すべてのヘルパーに感謝します。 あなたのご協力が大変ありがとうございます!

+0

のPowerShellのバージョンを使用してジョブを待ちますか? –

+0

こんにちは、私は4.0を使用しています –

答えて

0

私の意見では、Start-Processコマンドレットは素早いものに適しています。しかし、なぜexeが動作していないのかをデバッグしようとすると、多くのことが望まれます。

これを回避するには、.Netオブジェクトを使用してインスタンス化についてのリダイレクトや変更を行うと便利です。私は以下のexeをデバッグするのに問題があったときに使用した関数の例を示します。

function Start-Exe 
{ 
    param 
    ([string]$exePath, [string]$args1) 

    $returnVal = $false 
    $pinfo = New-Object System.Diagnostics.ProcessStartInfo 
    $pinfo.FileName = $exePath 
    $pinfo.RedirectStandardError = $true 
    $pinfo.RedirectStandardOutput = $true 
    $pinfo.UseShellExecute = $false 
    $pinfo.Arguments = $args1 
    $p = New-Object System.Diagnostics.Process 
    $p.StartInfo = $pinfo 
    $p.Start() | Out-Null 
    $p.WaitForExit() 
    $stdout = $p.StandardOutput.ReadToEnd() 
    $stderr = $p.StandardError.ReadToEnd() 
    $exitCode = $p.ExitCode 
    #OutputFile can be some log file, or just use write-host to pump to console 
    #$stdout | Add-Content $global:OutputFile 
    #$stderr | Add-Content $global:OutputFile 

    return $exitCode 
} 
+0

こんにちはDavid、あなたの返信のおかげで。私はexe実行に間違いがあることを知っている。(私は独立して、すべてがスムーズにし、その終了コード0実行中のexeファイルを実行すると)PowerShellプロセスは、私は2時間(常に) おかげで、 shlomy後、なぜPowerShellの停止を把握しようとしている クラッシュしています。 –

0

Wait-Processを使用せずに試してみると、再現性があるかどうかを確認できます。

Start-Process-Waitパラメータ。

または-Waitずに仕事でそれを作成し、Wait-.Jobレット

+0

こんにちは、私はすでにそれを試してみました、exeプロセスはPowershellプロセスの下でCPUのようなものに登録されているようですが、PSプロセスは終了しました。 –

関連する問題