2015-11-04 80 views
3

我們有一臺Microsoft Windows 2012服務器,我們在該服務器上以固定的時間間隔自動運行更新。我們希望向登錄用戶顯示一條消息,給他們幾分鐘,然後登出。我們正在使用一個內部自動化工具。發送消息給除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?

+0

userX是否也會被註銷,並且只是沒有通知,或者userX會保持登錄狀態? – SomethingDark

+0

UserX將不會被註銷,也不會收到消息 – Shrik97

+0

上面發佈的腳本將註銷除UserX之外的所有用戶。此功能工作正常,但我們不希望messaage被髮送到userX。與此同時,我們不知道當時有多少用戶或哪些用戶將在該機器中登錄。所以一切都需要動態。 – Shrik97

回答

0

而不是明確使用批處理,請考慮使用vbscript(如果您願意的話,.vbs文件)和批量混合。原因是vbscripts有一個直接從註冊表中調用值的方法,即正常的批處理文件不需要。 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 

該代碼將搜索當前計算機的註冊表,並確定你的用戶是如果是這樣,將不顯示註銷消息的用戶X。如果您希望使用此功能並從批處理文件中傳遞註銷消息,只需從批處理腳本cscript //nologo {DRIVE LETTER}:\filelocation %arg1%中調用即可。您可以將任意數量的參數傳遞給vbscript,並從腳本中傳遞參數爲%1%2等等,但無論多少參數。

註冊表值可能會因爲您在網絡上工作而有所不同,所以我不知道如何影響您的計算機的註冊表。要查看是什麼,請在您的機器上搜索regedit並自行確定。註冊表包含了計算機的所有內部工作,因此如果你不知道你在找什麼,它的圖書館是巨大的和難以遍歷的,所以要謹慎和耐心地工作。

相關問題