Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
向除Microsoft Windows 2012服务器上的用户以外的所有用户发送消息_Windows_Batch File - Fatal编程技术网

向除Microsoft Windows 2012服务器上的用户以外的所有用户发送消息

向除Microsoft Windows 2012服务器上的用户以外的所有用户发送消息,windows,batch-file,Windows,Batch File,我们有一台Microsoft Windows 2012服务器,在该服务器上,我们会以固定的时间间隔自动运行更新。我们希望向已登录的用户显示一条消息,给他们几分钟时间,然后将他们注销。我们正在使用内部自动化工具 我在网上找到了一个批处理文件,它将向所有用户发送一条消息,然后将他们注销。这很好,只是我们不希望消息显示给一个特定的用户,比如“userX”。 以下是脚本: @ECHO OFF choice /T:60/D N /N > Nul msg * You will be disconnec

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

我在网上找到了一个批处理文件,它将向所有用户发送一条消息,然后将他们注销。这很好,只是我们不希望消息显示给一个特定的用户,比如“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
自动化工具启动命令提示符,导航到批处理文件的位置,然后执行批处理文件


如何防止消息被发送到USEX?

< P>而不是使用显式批处理,考虑使用VBScript(A.VBS文件,如果您愿意)和批杂交。这是因为VBScript有一种直接从注册表调用值的方法,而普通批处理文件没有这种方法。VBScript可以在批处理程序中调用和使用,这两个脚本可以在彼此之间传递变量

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
set wshShell=WScript.CreateObject(“WScript.Shell”)
bing=wshShell.regrad(“HKEY\U CURRENT\U USER\Volatile Environment\USERNAME”)
如果bing是“userX”,那么
echo(“注销传入”)
如果结束
此代码将搜索当前计算机的注册表,并确定您的用户是否是userX,如果是,则不会显示注销消息。如果您希望使用此命令并从批处理文件传递注销消息,只需从批处理脚本调用
cscript//nologo{DRIVE LETTER}:\filelocation%arg1%
。您可以将任意多个参数传递给vbscript,从脚本中,无论参数有多少,它都将被引用为
%1
%2
,依此类推


当您在网络上工作时,注册表值可能不同,因此我不知道这会如何影响您计算机的注册表。要查看这是什么,请在您的计算机上搜索
regedit
,然后自己确定。注册表包含您计算机的所有内部工作,因此请谨慎耐心地工作,因为如果您不知道要查找什么,它的库非常庞大,很难遍历。

userX也会被注销,只是不会被通知,或者userX将保持登录?userX将不会注销,也不会收到消息上面发布的脚本将注销除userX以外的所有用户。此功能工作正常,但我们不希望将消息发送给userX。同时,我们不知道当时有多少用户或哪些用户将登录到机器中。所以一切都需要是动态的。你会接受vbscript和批处理混合吗?