在上一篇文章中,我们谈到了使用“登录到”限制用户多点并发登录,同时也看到了使用“登录到”限制用户多点并发登录的缺点。今天我们来探讨另外一个限制用户多点并发登录的方法——脚本,测试环境跟昨天一样,具体操作步骤如下:
1.
首先,我们需要在
DC
服务器上建一个文件夹
login$
,用于存放用户登录信息,权限设置为
Domain User
可修改。设置该文件夹的目的:记录用户登录和注销信息,如下图:
2.
将下面的脚本复制到记事本,保存为
logon.vbs
:
Dim oNet, sUser, sComputer, ServerLog
ServerLog = "\\netcn01.guoxuemin.cn\login$\"
Set oNet = CreateObject("Wscript.Network")
sUser = oNet.UserName
sComputer = oNet.ComputerName
Set oNet = Nothing
Dim fso, f1, WshShell, argu, alllog, lastlog
Dim FileName
FileName=ServerLog & sUser & ".txt"
Set fso = CreateObject("Scripting.FileSystemObject")
If Not (fso.FileExists(FileName)) Then
Set f1 = fso.CreateTextFile(FileName,True)
f1.WriteLine sUser & " " & sComputer
f1.Close
Set WshShell = Wscript.CreateObject("Wscript.Shell")
argu = FileName & "/T/E/G" & sUser & ":f /R Everyone"
WshShell.run("cacls " & argu)
Set WshShell = Nothing
End If
Set f1 = fso.OpenTextFile(FileName, 1, True)
alllog = f1.readall
f1.Close
Set f1 = fso.OpenTextFile(FileName, 1, True)
lastlog = f1.readline
f1.Close
If Left(lastlog, 5) = "logon" Then
If InStr(lastlog,sComputer) < 1 Then
Set f1 = fso.OpenTextFile(FileName, 2, True)
f1.WriteLine (lastlog & Chr(13) & Chr(10) & "FailLogon:" & Now() & " " & sUser & " at " & scomputer & Chr(13) & Chr(10) & alllog)
f1.Close
Set WshShell = Wscript.CreateObject("Wscript.Shell")
Dim i,OldComputer
i=InStr(lastlog,"at")
OldComputer=Right(lastlog,Len(lastlog)-i-2)
WshShell.popup "
对不起:此账号已经在
" & OldComputer & "
上登录!如果不是您本人登录的,那么说明您的账户已经被盗用,请联系
IT
部处理,谢谢!
",30
Set WshShell = Nothing
Dim os, retcode
For Each os In GetObject("Winmgmts:{impersonationLevel=impersonate,(shutdown,remoteshutdown)}!//" + sComputer).InstancesOf("Win32_OperatingSystem")
retcode = os.Win32ShutDown(4, 0)
Next
Wscript.quit
Else
Set f1 = fso.OpenTextFile(FileName, 2, True)
f1.WriteLine ("logon: " & Now() & " " & sUser & " at " & sComputer & Chr(13) & Chr(10) & alllog)
f1.Close
End If
Else
Set f1 = fso.OpenTextFile(FileName, 2, True)
f1.WriteLine ("logon: " & Now() & " " & sUser & " at " & sComputer & Chr(13) & Chr(10) & alllog)
f1.Close
End If
Set f1 = Nothing
Set fso = Nothing
Wscript.quit
3.
将下面的脚本复制到记事本,保存为
logoff.vbs
:
dim oNet,sUser,sComputer,ServerLog
ServerLog = "\\netcn001.guoxuemin.cn\login$\"
set oNet=createobject("Wscript.Network")
sUser=oNet.UserName
sComputer=oNet.ComputerName
set oNet=nothing
dim fso,f1,alllog,lastlog
Dim FileName
FileName=ServerLog & sUser & ".txt"
set fso=createobject("Scripting.filesystemobject")
set f1=fso.opentextfile(FileName,1,true)
lastlog=f1.readline
f1.close
set f1=fso.opentextfile(FileName,1,true)
alllog=f1.readall
f1.close
if left(lastlog,5)="logon" Then
If InStr(lastlog,sComputer) > 0 Then
Set f1=fso.opentextfile(FileName,2,true)
f1.writeline("logoff: " & Now() & " " & suser & " at " & scomputer & Chr(13) & chr(10) & alllog)
f1.close
End If
end if
set f1=nothing
set fso=nothing
wscript.quit
4.
在需要限制的
OU
上建立组策略,这里我们以
IT
部为例,在
IT
部
OU
上点右键,选属性。新建一个组策略,然后点
Edit
,如下图:
5.
在“
Group Policy Object Editor
”对话框中,选择“
User Configuration—Windows Settings—Scripts(Logon/Logoff)
”,双击右面板上的
Logon
,将
logon.vbs
脚本加载进去;双击右面板上的
Logoff
,将
logoff.vbs
脚本加载进去。如下面图:
6.
现在都设置好了,我们来测试一下,使用
Tony.guo
登录
netcnxp
这个客户端,然后再登录
client
这个客户端,系统会弹出一个报警对话框,如下图:这说明我们的脚本起作用了。
我们打开刚才的用户,查看登录信息,如下图:该文件可以详细的记录用户的登录、注销信息,还能记录登录失败的信息,很方便我们查找。
使用“脚本”限制用户多点并发登录,可以很方便的进行部署,只需要在服务器上加载登录脚本就可以了,而且可以保证在任何时刻用户都只登录一台机器,
Login$
中记录的用户登录信息也方便管理员查找、备案。用户也不会被限制在一台机器上登录,同一时间用户只登录一台机器的目的也达到了。
本文转自Tonyguo 51CTO博客,原文链接:
http://blog.51cto.com/tonyguo/160816
,如需转载请自行联系原作者