限制域中某台客户机上可以登录的用户

在windows域中,默认情况下,一个域用户可以在任何一台工作站上登录到域,如果要控制在某台客户机上可以进行登录的用户帐号,可以通过组策略中:计算机配置\Windows设置\安全设置\本地策略\用户权限指派\允许在本地登录来实现。
如果有30个用户分别登录到30台客户机,每一天客户机仅允许对应的用户或administrator登录,那就要使用30个OU分别应用30个GPO(可能我的计算有点问题,但总之是非常麻烦了^_^)。
所以我使用了一个脚本,只要将脚本作为用户登录脚本给30个用户分发就可以,然后用户自己在c盘创建一个允许登录用户的列表文件,里面每行代表一个运行登录该客户机的用户名。如果不创建该文件,那么就不限制登录用户。默认administrator可以在任何计算机上登录。
这个办法好在只要创建一个GPO就可以了。希望能够抛砖引玉,大家一起讨论一下。脚本如下:

'********************************************************'
'*这是一个用来限制在本地登录帐号的脚本               
'*脚本作为用户登录脚本来执行,执行时候打开一个文本,
'*检查其中允许登录的用户列表,如果用户登录名称在列表中,
'*允许登录,否则就不能注销用户;
'*如果用户列表文件没有,就退出脚本运行
'********************************************************'

' Create a new WshNetwork object to access network properties.
Set WshNetwork = WScript.CreateObject("WScript.Network")

' Create shell objects.
'Set Shell = WScript.CreateObject("Shell.Application")
Set obj = WScript.CreateObject("WScript.Shell")

username=WshNetwork.UserName

Set fso = CreateObject("Scripting.FileSystemObject")

'判断用户列表文件是否存在,用户可以根据自己的需要选择文件名和路径
file = "C:\Limited.user"        ' Default test file
' Try to get a filename from the Arguments collection.
Set objArgs = WScript.Arguments ' Create object.
If objArgs.Count > 0 Then       ' Argument found.
    file = objArgs(0)           ' Set filename to first argument.
End If

'如果文件不存在,就退出脚本运行
Set fso = CreateObject("Scripting.FileSystemObject")
If not fso.FileExists(file) Then ' Check whether file exists.
    'msgbox "没有找到限制用户列表文件,无法实现登录限制!",48
    Wscript.quit
End If

'如果文件存在,按行读取文件,并将当前登录用户名和文件行数据(用户列表)比较
'如果当前用户存在在允许列表中,就退出脚本运行,用户登录成功
Set txtStream = fso.OpenTextFile(file) ' Open text file.
Do While Not (txtStream.atEndOfStream)
    Text = txtStream.ReadLine
if (username = text) or (username = "bob.xu") then
    Wscript.quit
end if
Loop

'如果用户列表文件读取到最后,或者当前登录用户名没有出现在列表中,注销用户
msgbox "账号:" & username & " 无权在本计算机上交互登录!!",48
obj.Run "logoff"

'*** End

 

posted on 2006-11-28 13:25  大智弱驴  阅读(1330)  评论(1编辑  收藏  举报

导航