强制用户注销 Windows 7 脚本

强制用户注销 Windows 7 脚本

有没有办法在 Windows 7 Home Premium 中通过命令行强制其他用户注销?

我的工作 VPN 策略要求只能有 1 个用户登录,要注销其他用户,我必须以管理员身份运行命令提示符,运行任务管理器,然后右键单击并注销他们。这有点烦人。理想情况下,我希望运行一个可执行文件或批处理脚本,只需一步即可完成所有操作。我遇到了几个讨论在设置超时后注销用户的帖子,这可能也可以正常工作(假设有任何可行的方法......我的发现是没有) - 但如果可能的话,我仍然想知道如何一步完成。

有什么方法可以实现我的要求吗?

如果必须的话,我并不反对编写.net 应用程序。

答案1

您可以使用类似这个批处理文件(改编自这里):

@echo off
query session > c:\temp\session.txt
for /f "skip=2 tokens=2,3,4" %%i in (c:\temp\session.txt) DO if not "%%i"=="Geoff" logoff %%j
del c:\temp\session.txt
pause

这使用查询会话命令获取会话列表,然后为了命令来解析输出,最后注销命令注销其他用户。您需要运行该query session命令来检查计算机上的输出。

在我的计算机上,我得到:

C:\Users\Geoff\Desktop>query session
 SESSIONNAME       USERNAME                 ID  STATE   TYPE        DEVICE
 services                                    0  Disc
>console           Geoff                     1  Active

前两行是垃圾,因此该skip 2部分将忽略它们。用户名、ID 和状态分别放入 i、j 和 k 变量中。您需要对其进行测试,如果它无法以非管理员用户身份运行,则可以右键单击桌面上的文件并选择“以管理员身份运行”,或者您可以创建批处理文件的快捷方式,然后选择属性 | 快捷方式 | 高级 | 以管理员身份运行。无论哪种方式,您都会收到 UAC 提示。最后,如果您想在没有 UAC 提示的情况下运行批处理文件,您可以选择更晦涩的任务计划程序路线:参见这个帖子

答案2

查看电源关断来自 MS。您可以使用它来-o注销控制台用户,并创建一个只需单击一下即可运行的批处理文件(或右键单击 > 以管理员身份运行)。

PsShutdown 是一个命令行实用程序,类似于 Windows 2000 资源工具包中的关机实用程序,但功能更多。除了支持关闭或重新启动本地或远程计算机的相同选项外,PsShutdown 还可以注销控制台用户或锁定控制台(锁定需要 Windows 2000 或更高版本)。

另外,也许可以看看这个问题:用户帐户超时?

答案3

作为我的替代品其他答案(这个问题让我思考!),您还可以考虑将两种方法结合起来:

  1. 在每个工作站上设置计划任务以运行注销脚本。触发器将是特定的事件日志条目。
  2. 使用您自己桌面上的 .vbs 脚本将触发条目发布到事件日志。

依次如下:

计划任务

我认为您需要以每个用户的身份登录,然后添加具有自定义触发器的新任务:触发器 | 新建 | “事件发生时” | 自定义 | 新事件过滤器 | XML | “手动编辑”。然后对 XML 使用类似以下内容:

<QueryList>
  <Query Id="0" Path="Application">
    <Select Path="Application">*[System[(Level=4 or Level=0) and (EventID=4)]] and *[EventData[Data[1]='EVERYBODY_OFF']]</Select>
  </Query>
</QueryList>

这将在应用程序日志中查找 EventID 为 4(信息)且数据主体为“EVERYBODY_OFF”的信息事件。您可以阅读有关事件触发器的更多信息这里

该操作应该尽可能简单shutdown -l,它应该触发注销(您需要测试它)。

触发脚本

以下 .vbs 脚本将根据需要记录“EVERYBODY_OFF”事件:

const EVENTLOG_INFORMATION = 4
strMessage = "EVERYBODY_OFF"
set objShell = CreateObject("WScript.Shell")
objShell.LogEvent EVENTLOG_INFORMATION, strMessage

测试内容

我不太确定的部分,需要进行一些测试:

  • 这是向机器全局发布的事件消息吗?也就是说,所有用户都会看到该任务吗?
  • 关机命令是否会在目标用户的上下文中正确运行?

答案4

以下是来自 The Scripting Guys 的一篇有趣的文章,描述了由事件触发的强制注销:

http://blogs.technet.com/b/heyscriptingguy/archive/2010/06/10/hey-scripting-guy-how-can-i-log-out-a-user-if-they-launch-a-particular-application.aspx

假设您可以使用用户 A 登录或启动 explorer.exe 作为触发事件来注销用户 B。

相关内容