我想在 Windows 终端服务器 2008 及更高版本上安排一个任务,该任务每 10 分钟运行一次并终止一些进程,如“outlook.exe”,但是这只应该为从另一个终端服务器连接的用户完成(所以他们都有相同的客户端名称 - 用户 shell 在他们自己的机器上使用 Outlook - 由于用户从家庭办公室连接,因此必须安装 Outlook)。
任务管理器显示用户名、进程和客户端名称。
这个小代码可以很好地列出所有登录的用户
strComputer =“。” 设置 objWMI = GetObject("winmgmts:" _ & "{impersonationLevel=impersonate}!\" _ & strComputer & "\root\cimv2")
Set colSessions = objWMI.ExecQuery _ ("Select * from Win32_LogonSession Where LogonType = 10")
If colSessions.Count = 0 Then Echo "No interactive users found" Else echo "RDP Sessions:" For Each objSession in colSessions Set colList = objWMI.ExecQuery("Associators of " _ & "{Win32_LogonSession.LogonId=" & objSession.LogonId & "} " _ & "Where AssocClass=Win32_LoggedOnUser Role=Dependent" ) For Each objItem in colList Echo "Username: " & objItem.Name & " FullName: " & objItem.FullName Next Next End If
用户可以获得他自己的客户名称,如下所示
设置 objShell = CreateObject("WScript.Shell") ClientComp = objShell.ExpandEnvironmentStrings("%clientname%")
但我不希望每个用户都有自己的 vbs 永久打开。应使用管理员权限安排任务。似乎没有办法使用 vbs 和 WMI 来实现这一点,请有人给点提示吗?