批处理-在特定程序打开的情况下获取特定计算机上的用户列表吗?

时间:2018-10-25 13:01:36

标签: batch-file

背景知识

在我公司,我们有一个原始应用程序(只能从网络上的几台计算机打开),该应用程序监视并允许我们的自定义可执行文件停止,启动,退出看门狗控制等。

我已经开发了一种解决方案,该解决方案在进程超时或重新启动时触发批处理文件运行。这个批处理脚本非常简单,当前要做的只是在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"

但是我很难将这两个命令关联在一起,以在选定的计算机上打开此特定应用程序来获取用户的完整列表。

0 个答案:

没有答案