【发布时间】:2015-01-30 10:03:47
【问题描述】:
我想在 Windows Terminal Server 2008 及更高版本上安排一个任务,该任务每 10 分钟运行一次,并终止一些进程,如“outlook.exe”,但是这仅适用于从另一个 TerminalServer 连接的用户(所以他们都有相同的客户端名称 - 用户 shell 在他们自己的计算机上使用 Outlook - 由于用户从家庭办公室连接,因此必须安装 Outlook。
任务管理器显示用户名、进程和客户端名称。
这个小代码可以很好地列出所有登录的用户
strComputer = "."设置 objWMI = GetObject("winmgmts:" _ &“{impersonationLevel=impersonate}!\”_ & strComputer & "\root\cimv2")
设置 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 & "} " _ &“其中 AssocClass=Win32_LoggedOnUser 角色=依赖”) 对于 colList 中的每个 objItem Echo "用户名:" & objItem.Name & " 全名:" & objItem.FullName 下一个下一个结束如果
用户可以获得他自己的客户名称,如下所示
设置 objShell = CreateObject( "WScript.Shell" ) ClientComp = objShell.ExpandEnvironmentStrings("%clientname%")
但我不希望每个用户都有自己的 vbs 永久打开。应使用管理员权限安排任务。似乎没有办法使用 vbs 和 WMI 来实现这一点,请各位大神指点一下?
【问题讨论】:
-
是否有特定原因必须与管理员用户一起安排任务?对于您描述的行为,您也可以使用用户权限运行它,然后每个用户都会杀死自己的前景。此外,如果您有 gpos,您可以通过拒绝特定用户开始运行 exe 而不是一直授予他们 10 分钟的时间来阻止整个事情。我希望很多人会再次重新打开前景
-
我的意图是只需要运行一个脚本。可以使用系统特权运行。基于用户是不可能的,因为一些用户同时使用 - homeoffice 和从其他 TS 连接。应该允许 Homeoffice 使用 Outlook,而其他人则不能。如果他们再次打开 Outlook 超过时间限制,例如 3 分钟,那么他们注意到在 TS 上使用 Outlook 是没有意义的......
-
是的,我的意思是使用用户权限运行它,但仍然检查客户端名称,但是你是对的,多个脚本会同时运行,尽管我认为它不会花费很多性能.不幸的是,我通过 wmi 查询发现了我的想法,并且 applocker gpo 也不起作用,因为 win32_environment 似乎不包含客户端名称,因为它是易变的。所以你可能需要某种登录脚本
标签: windows vbscript process scheduled-tasks terminal-server