背景知识
在我公司,我们有一个原始应用程序(只能从网络上的几台计算机打开),该应用程序监视并允许我们的自定义可执行文件停止,启动,退出看门狗控制等。
我已经开发了一种解决方案,该解决方案在进程超时或重新启动时触发批处理文件运行。这个批处理脚本非常简单,当前要做的只是在Windows事件日志中放置一个条目,告诉我们重新启动的进程的名称。
第一个参数是事件的类型,第二个参数是进程名称。
参见下文:
if "%1%" == "restart" (
eventcreate /L Application /SO Watchdog /T Warning /id 218 /D "Process %2 restarted!"
) else if "%1%" == "timeout" (
eventcreate /L Application /SO Watchdog /T Warning /id 218 /D "Process %2 timed out!"
)
这很好用,但是不幸的是,这个原始应用程序无法指示重新启动进程的用户的名称(如果用户手动重新启动进程而不是看门狗自动重新启动进程)。
因此,我的想法是在此批处理脚本中添加一些行,以获取当时已打开此原始应用程序的所有计算机(只有少数可能的计算机)上所有用户的列表。由于此应用程序很少处于打开状态,因此很可能会将其范围缩小到仅一个用户,但是即使返回了多个用户,我至少也知道它是其中之一,而不是一无所知。
所以我想要这样的东西:
if "%1%" == "restart" (
eventcreate /L Application /SO Watchdog /T Warning /id 218 /D "Process %2 restarted!"
) else if "%1%" == "timeout" (
eventcreate /L Application /SO Watchdog /T Warning /id 218 /D "Process %2 timed out!"
)
REM Code to find all users on all machines who have this application open
eventcreate /L Application /SO Watchdog /T Information /id 219 /D "<list of users>"
我已经阅读了关于SO的几个问题,并且发现了该命令,其中列出了特定服务器的所有用户:
qwinsta /server:<server name>
此命令将获得在当前服务器上打开的应用程序的所有实例的列表:
tasklist /fi "imagename eq <exe name>.exe"
但是我很难将这两个命令关联在一起,以在选定的计算机上打开此特定应用程序来获取用户的完整列表。