跟踪Windows进程退出代码

时间:2019-01-10 13:08:06

标签: powershell process wmi exit-code

在某些Citrix桌面上,我们遇到了随机终止(崩溃?)应用程序的问题。事件日志没有显示任何内容。

我的想法是在一段时间内跟踪进程的启动和停止以及它们的退出/错误代码,并尝试找到一种模式。

我的方法是通过Powershell:

function Enable-ProcessStopTrace {            
[CmdLetBinding()]            
param(            
)             
$Query = "Select * From __InstanceDeletionEvent within 2 Where TargetInstance ISA 'Win32_Process'"            
$Identifier = "StopProcess"            
$ActionBlock = {            
 $e = $event.SourceEventArgs.NewEvent.TargetInstance            
 write-host ("Process {0} with PID {1} has stopped at {2}" -f $e.Name, $e.ProcessID, $event.TimeGenerated)      


 $fmt = 'ProcessStopped: (ID={0}, Parent={1}, Time={2}, Name="{3}", ExitCode={4})'            
 $msg = $fmt -f $e.ProcessId, $e.ParentProcessId, $event.TimeGenerated, $e.Name, $e.Exitcode

 write-host ($msg)            
}            
Register-WMIEvent -Query $Query -SourceIdentifier $Identifier -Action $ActionBlock            
}

Enable-ProcessStopTrace

(从博客文章中无耻地复制并修改)

每次进程终止时,我都会得到很好的输出,但是“ exitcode”始终为空。

这是正确的方法吗?我可以这样获得退出代码或错误代码吗? 还是我必须走一条完全不同的路线?

1 个答案:

答案 0 :(得分:0)

我可以使其正常工作的唯一方法是:

https://social.technet.microsoft.com/Forums/lync/en-US/5b318b42-27c9-49d1-8c19-c5d7f0b9dbb2/getting-exit-code-from-startprocess?forum=winserverpowershell

$actualUrl = urldecode ($_GET ['url']);

该脚本在后台运行(等待),直到应用程序关闭(正常关闭或关闭),然后可以运行$ applicationname.exitxcode获取退出代码。