当然,你还可以使用前面提到的Kixtart修饰一下这个程序。但有一点要注意,如果允许用户看提示信息的时间过长,意味着用户有足够的时间来终止logout.exe的执行。
但是,这个NTName存在明显的不足,就是在多域的情况下,它会影响另一个域中同名账号的登录。比如,Sales域中的John没有注销,Markets域中的John将不能登录。然而,我们还是找到了解决的办法。NTName2支持自定义的NetBIOS名字,如前所述,这个名字是你登录时是由系统自动添加的。但NTName2允许你自己指定一个值,默认值为Byte 16=oxCE。由于程序需要根据这个值来确定名字冲突,这样执行速度稍微会有一点慢,另一个美中不足的是,自定义的Byte 16值可能与其他NetBIOS应用程序发生冲突。
三、Microsoft 事实上,很多管理员都希望Microsoft提供一个自己的解决方案。最终,Microsoft在 2000 Server Resource Kit中提供了一个命名为CConnect的程序。注意,CConnect虽然在Windows 2000中才出现,但它支持Windows NT,但对系统方面有些特殊需求,主要包括必须是NT SP4或者更高,Windows Script Host,WBEM,MDAC 2.0以上版本。Windows 2000本身已经满足这些条件。这也是目前唯一由Microsoft自己实现的一个解决方案,主要提供了这些功能:
ü 跟踪所有用户已经登录的计算机
ü 允许把并发连接限制到每用户或者每组方式
ü 所有的信息被保存地SQL数据库中
ü 跟踪用户最后登录的计算机
ü 监视用户已经登录到哪台
程序以典型的客户/方式运行。因此,它要求在客户端正确地配置组策略并安装客户端软件,如图1所示。这些组策略选项由CConnect软件包中的CConnect.adm文件提供,并不是由Windows 2000自带的。因此,你必须把这个文件添加到相应的组策略中。打开活动目录用户与计算机管理单元,选择适当的组策略(只有这个策略受到作用的用户才会生效,所以一般我们选择Default Domain Policy),展开用户配置,右击管理员模板*属性*添加,从相应的文件夹中找到CConnect.adm文件,最后,从查看菜单中清除“仅显示策略”。图1中看到的是Windows 2000中组策略选项配置界面,如果你使用的是WinNT 4.0,应该使用Poledit.exe程序打开这个模板。每位管理员可以根据实际要求来配置这些选项,决定启用哪些功能。策略中提供调试与日志记录功能,这对高要求的环境提供了进一步的支持,当然,你可能需要做进一步的配置,如指定日志记录的位置。策略中的“Track Last User”是非常有意思的,有时候计算机可能意外停机(如停电),导致用户没有及时注销,此时用户登录的信息仍然保留在数据库中,此时如果用户试图登录到其他计算机,登录将被拒绝,因为策略认为你仍然登录在另一台计算机上,此时你必须从数据库中搜索相关信息,并予以删除后方可登录。但如果你是登录到同一台计算机(来电后重新登录),数据库信息会被自动更新,并不需要额外的工作。
![](/imgfiles/2005.11.4.10.37.46.14.1.jpg)
图1:Con-Connect Limiter提供的组策略选项 对于服务器端,你还需要正确配置SQL服务器,为CConnect指定一个具有与sa平等权限的登录账号,这些账号登录信息被保存在每台计算机的下列位置:
HKEY_CURRENT_USER\Software\Microsoft\CConnect\SQLSERVER
HKEY_CURRENT_USER\Software\Microsoft\CConnect\SQLUSER
HKEY_CURRENT_USER\Software\Microsoft\CConnect\SQLPASSWORD
Windows 2000的客户计算机可以从VB Script中获益。CConnect软件包中提供了CConnect.vbs(登录)与CClogoff.vbs(注销)两个脚本文件。脚本程序可以实现简单的并发登录限制与远程注销功能,但如果你希望实现CConnect实现的所有功能,建议你安装CConnect Client程序。
图2显示的是CConnect的管理界面,很容易看出可以实现什么功能。在这里我不再详细地描述整个配置过程,有兴趣的读者可以使用随CConnect提供的文档来配置。总体来说,还是非常简单的。
但我们从上面的一些关键信息的描述中不难看出CConnect中存在的问题:—所有的SQL连接信息以明文方式被保存在注册表中,这显然是一件令人提心吊胆的事。其次,对于略通注册表的用户,通过修改注册表就可以解除登录限制,除非你在组策略中限制用户修改注册表。但从解决并发登录限制角度来说,CConnect从可管理性角度讲,是一个不错的选择,而且最新版本( 2.0)还实现对终端用户的限制支持。
![](/imgfiles/2005.11.4.16.44.34.3.1.jpg)
以上是对并发登录限制三个方案的简单比较,很明显,不论是Windows管理员自己还是Microsoft,都在进步,我们期待更完美的解决方案。如果你有更好的方案,不妨与我们共享一下?
CLS
AT (1,1)
If @INWIN = 2 ; 表示客户计算机是Windows 95/98
$L = "@LSERVER" + "\" + "NETLOGON" + "\" + "WINSET.EXE"
shell "$L USERNAME=@USERID"
shell "$L HOMEDRIVE=X:" ; 你为用户映射的网络驱动器
shell "$L HOMEPATH=@HOMEDIR"
shell "$L HOMESHARE=@HOMESHR"
shell "$L COMPUTERNAME=@WKSTA"
shell "$L USERDOMAIN=@DOMAIN"
shell "$L LOGONSERVER=@LSERVER"
shell "$L USERPROFILE=@HOMESHR"
shell "$L OS=Windows_98"
setl "USERNAME=@USERID"
setl "HOMEDRIVE=X:"
setl "HOMEPATH=@HOMEDIR"
setl "HOMESHARE=@HOMESHR"
setl "COMPUTERNAME=@WKSTA"
setl "USERDOMAIN=@DOMAIN"
setl "LOGONSERVER=@LSERVER"
setl "USERPROFILE=@HOMESHR"
setl "OS=Windows_98"
endif
If @WKSTA <> "@LSERVER" ; 如果客户的工作站不是这台计算机
settime "@LSERVER" ; 把工作站的时间设置成服务器时间
endif
use X: "@HOMESHR" ;这是Kixtart中自带的Net use命令
$S = "@LSERVER" + "\" + "NETLOGON" + "\" + "users.txt"
IF INGROUP("users") and EXIST("$S")
Display "$S"
AT (23,1) "按任何键继续"
GET $A
endif
$B = "@LSERVER" + "\" + "NETLOGON" + "\" + "LOGBAT.BAT"
shell "$B"
CLS
BIG
$X = 1
DO
COLOR w/n
AT ( $X,$X*2 ) "@USERID"
$X = $X+1
UNTIL $X = 6
COLOR g+/n
AT ( $X,$X*2 ) "@USERID"
sleep 3
AT (23,0)
SMALL
$K=”@LSERVER”+”\”+”NETLOGON”+”\”+Onlyonce.txt”
$J=”x:\”+”@USERID”+”.txt”
if exist(“J$”)
goto done
endif
CLS
Display “$K”
Sleep 3
$RC=shutdown(“”,”正在关闭系统!”,0,1,0)
:done
cookie1 ; 需要通知Windows 98计算机当通过LMSCRIPT时脚本已经运行完毕
exit
【责编:admin】
--------------------next---------------------