发送消息给除Microsoft Windows 2012 Server上的用户以外的所有用户

时间:2015-11-04 06:52:38

标签: windows batch-file

我们有一台Microsoft Windows 2012 Server,我们会在固定的时间间隔内自动运行更新。我们希望向登录用户显示一条消息,给他们几分钟,然后再将其注销。我们正在使用内部自动化工具。

我在网上找到了一个批处理文件,它会向所有用户发送一条消息,然后再将其注销。这很好,除了我们不希望消息显示给一个特定的用户,比如说“userX”。 以下是剧本:

@ECHO OFF
choice /T:60/D N /N > Nul
msg * You will be disconnected in 1 minute! Please log off now!
choice /T:60 /D N /N > Nul
query session >C:\SchedTasks\sessions.txt
find /v "userX" C:\SchedTasks\sessions.txt > C:\SchedTasks\killts.txt
for /f "skip=5 tokens=3," %%i in (C:\SchedTasks\killts.txt) DO logoff %%i
query session >C:\SchedTasks\sessions.txt
find /v "userX" C:\SchedTasks\sessions.txt > C:\SchedTasks\killts.txt
for /f "skip=5 tokens=2," %%i in (C:\SchedTasks\killts.txt) DO reset session       %%i
del C:\SchedTasks\sessions.txt
del C:\SchedTasks\killts.txt
EXIT

自动化工具启动命令提示符,导航到批处理文件的位置,然后执行批处理文件。

如何阻止将邮件发送到userX?

1 个答案:

答案 0 :(得分:0)

不考虑使用显式批处理,而是考虑使用vbscript(如果你愿意的话,使用.vbs文件)和批处理混合。原因是vbscripts有一种直接从注册表调用值的方法,正常的批处理文件没有。 Vbscripts可以在批处理程序中调用和使用,两者可以在彼此之间传递变量。

set wshShell = WScript.CreateObject("WScript.Shell")
bing = wshShell.regread("HKEY_CURRENT_USER\Volatile Environment\USERNAME")
If bing <> "userX" Then
WScript.echo("Log Out Incoming")
End If

此代码将搜索当前计算机的注册表,并确定您的用户是否为userX,如果是,则不会显示注销消息。如果您希望使用此功能并从批处理文件传递注销消息,只需从批处理脚本cscript //nologo {DRIVE LETTER}:\filelocation %arg1%调用即可。您可以根据需要向vbscript传递任意数量的参数,并从脚本中将其引用为%1 %2,以此类推,无论多少参数。

注册表值可能与您在网络上的工作不同,因此我不知道这会如何影响您的计算机的注册表。要查看它是什么,请在您的计算机上搜索regedit并自行确定。注册表包含您计算机的所有内部工作方式,因此如果您不知道自己在寻找什么,那么它的库很难且难以遍历,因此需要谨慎和耐心地工作。

相关问题