如何找出谁在运行runas应用程序?

时间:2016-05-26 14:52:56

标签: windows powershell batch-file command-line runas

背景

在我的组织中有一个我们用于某些关键功能的应用程序,但它仅在作为特定用户运行时才有效。

原因是应用程序将其大量配置存储为本地用户会话,因此它成为多用户噩梦,这意味着我们不得不复制大量工作。

我们已指派用户运行该应用程序,并通过设置runas桌面快捷方式找到了解决方案。问题是我们发现应用程序无法同时运行多次。它只允许每个并发用户运行1个实例。

我用于应用程序的快捷键代码:

C:\Windows\System32\runas.exe /user:mydomain\runas_user /savecreds "C:\Program Files\MyApp\MyApp.exe"

因此,我一直在努力确定我如何看到谁正在使用“runas”应用程序,所以我可以让他们优雅地关闭它。 任务管理器只显示用户名中的“runas_user”,但我认为必须有一些方法来确定谁运行它或者哪个用户会话正在查看它。

问题:

我是否可以通过某种方式找到当前正在运行该应用程序的PowerShell或其他一些脚本?

1 个答案:

答案 0 :(得分:1)

Windows安全事件日志应显示此信息。所有Windows 2008+身份验证事件都是事件ID 4624(通过)或4625(失败)。将它与登录类型相结合可以得到你想要的。

有关sans.org上this PDF的登录类型的大量详细信息(从第10页开始)。我认为您最感兴趣的部分是“3.7 NewCredentials”:

  

使用RunAs命令在其他用户帐户下启动程序   使用/ netonly开关,Windows会记录登录/注销事件   登录类型9.使用/ netonly使用RunAs启动程序时,   程序在用户当前登录时在本地计算机上执行   但是对于网络上其他计算机的任何连接,Windows   使用RunAs上指定的帐户连接到这些计算机   命令。没有/ netonly Windows在本地运行程序   计算机和网络上的指定用户并记录下来   登录类型为2的登录事件

使用PowerShell获取事件ID和登录类型的快速而又脏的方法:

$recentSecLog = 
Get-EventLog -LogName Security -Newest 1000 | Where {$_.EventID -match "4624|4625"}

$recentSecLog | Where {$_.message -match "Logon\sType:\s+9"}