背景:
在我的组织中,有一个应用程序用于某些关键function,但只有在以特定用户身份运行时才能发挥最佳效果。
原因是应用程序将大量的configuration存储为本地用户会话,所以它变成了一个多用户的噩梦,这意味着我们不得不复制大量的工作。
我们已经分配了一个用户来运行该应用程序,并通过设置runas桌面快捷方式find了一个解决scheme。 问题是,我们发现应用程序不能同时运行多个。 它只允许每个并发用户运行1个实例。
我用于应用程序的快捷方式代码:
C:\Windows\System32\runas.exe /user:mydomain\runas_user /savecreds "C:\Program Files\MyApp\MyApp.exe"
因此,我一直在试图确定如何看到谁正在使用“runas”应用程序,所以我可以让他们优雅地closures它。 任务pipe理器只显示“用户名”中的“runas_user”,但我认为必须有一些方法来确定谁运行它或哪个用户会话正在查看它。
题:
有什么方法可以找出(最好使用PowerShell或其他脚本)谁正在运行该应用程序?
Windows安全事件日志应该显示这个。 所有Windows 2008+身份验证事件都是事件ID 4624(通过)或4625(失败)。 结合登录类型应该得到你想要的。
关于登录类型的详细信息,请参见sans.org上的这个PDF (从第10页开始)。 我觉得你最感兴趣的部分是“3.7 NewCredentials”:
使用RunAs命令通过/ netonly开关以不同的用户帐户启动程序,Windows会记录登录类型为9的登录/注销事件。使用/ netonly以RunAs启动程序时,程序将以用户身份在本地计算机上执行当前登录,但对于网络上其他计算机的任何连接,Windows使用RunAs命令中指定的帐户连接到这些计算机。 没有/ netonly Windows作为指定的用户在本地计算机和网络上运行该程序并记录登录类型2的登录事件
快速和肮脏的方式来获取事件ID和登录类型与PowerShell:
$recentSecLog = Get-EventLog -LogName Security -Newest 1000 | Where {$_.EventID -match "4624|4625"} $recentSecLog | Where {$_.message -match "Logon\sType:\s+9"}