发信人: nonepassby(左右無人)
整理人: qcrsoft(2002-05-09 23:21:39), 站内信件
|
<%
' ADSI(全名为Active Directory Services Interface,即活动目录服务接口), 是 Microsoft 新推出的一项技术,它统一了许多底层服务的编程接口,程序员可以使用一致的对象技术来访问这些底层服务。ADSI把这些服务的公共部分提取出来,同时隔离出相异的部分,程序员可以用统一的接口访问底层服务的公共部分,并延伸到底层服务的专有部分。它同多种语言有良好的接口,对asp程序员来说,ADSI技术是值得一看的,除非只想局限于脚本编程。
'**********************************************************************************
' Windows NT域用户管理程序代码库
'
' 为了更好地让大家了解ADSI编程,我特意把ADSI的一个主要目录服务Windows NT域目录服务,
' 有关ADSI的简介,请看我放在asp版的介绍,如有兴趣跟我交流,请跟我联系。
'
' 以下代码库代码力求做到简单易懂,你可根据需要扩充或修改某些功能或合并函数
' 为了节省空间,代码基本上是显示属性,我想你一定会自己编一个修改属性的函数,因此就没写在上面^^
'
' 特意为NT4.0的网友提供了一些属性操作,但没有测试过:(,请帮忙测试过后告诉我
' 如某个函数在你的机器上不成功,请跟我联系
'
' ******* 注意:请记住必须以管理员身分登录!!微软并不是放松到了这个地步^^*******
'
'***** strDomain为域名,如你的计算机不在网络上,就是你的机器名。比如我的是Jack.******
'**********************************************************************************
'**********************************************************************************
'**********************************************************************************
'1. 计算机域操作
'**********************************************************************************
'1.1 显示Window NT域目录服务名字空间的所有域,有关名字空间,即namespace,是编程技术的一大突破
Sub ShowAllDomains()
Dim objNameSpace
Dim Domain
Set objNameSpace = GetObject("WinNT:")
For Each Domain in Namespace
Response.Write Domain.Name&"<br>"
Next
End sub
'**********************************************************************************
'**********************************************************************************
'1.2 显示所有跟主域控制器相连接的计算机
Sub ShowAllComputers(strDomain)
Dim PrimDomainContr
Set PrimDomainContr = getobject("WinNT://" & strDomain)
PrimDomainContr.filter = Array("Computer")
For each Computer in PrimDomainContr
Reponse.write Computer.Name&"<br>"
Next
End sub
'**********************************************************************************
'**********************************************************************************
'1.3 删除跟主域控制器相连接的计算机,此删除非彼删除也^^
Sub DelComputerFromPDC(strDomain,strDelComputer)
Dim PrimDomainContr
Set PrimDomainContr = getobject("WinNT://" & strDomain)
Call PrimDomainContr.Delete("Computer", strDelComputer)
End Sub
'**********************************************************************************
'**********************************************************************************
'**********************************************************************************
'2. 计算机用户操作
'**********************************************************************************
'2.1 显示所有的用户帐号
sub ShowAllUsers(strDomain)
Dim Computer
Dim User
Set Computer = GetObject("WinNT://" & strDomain)
Computer.Filter = Array("User")
For Each User in Computer
Response.Write User.Name&"<br>"
Next
End Sub
'**********************************************************************************
'**********************************************************************************
'2.2 显示密码的最小存在期(Display Minimum Password Age)
Sub DispMinPassAge(strDomain)
Dim Computer
Set Computer = GetObject("WinNT://" & strDomain)
Response.Write ((Computer.MinPasswordAge) / 86400)
End Sub
'**********************************************************************************
'**********************************************************************************
'2.3 显示密码的最小长度要求
Sub DispMinPassLength(strDomain)
Dim Computer
Set Computer= GetObject("WinNT://" & strDomain)
Response.Write Computer.MinPasswordLength
End Sub
'**********************************************************************************
'**********************************************************************************
'2.4 显示密码原来的长度(Display Password History Length)
Sub DispPassHisLength(strDomain)
Dim Computer
Set Computer = GetObject("WinNT://" & strDomain)
Response.Write Domain.PasswordHistoryLength
End Sub
'**********************************************************************************
'**********************************************************************************
'2.5 显示自动解锁时间
Sub DispAutoUnlock(strDomain)
Dim Computer
Set Computer = GetObject("WinNT://" & strDomain)
Response.Write Computer.AutoUnlockInterval
End Sub
'**********************************************************************************
'**********************************************************************************
'2.6 锁定观察时间
Sub DispAutoUnlockObservation(strDomain)
Dim Computer
Set Computer = GetObject("WinNT://" & strDomain)
Response.Write Computer.LockOutObservationInterval
End Sub
'**********************************************************************************
'**********************************************************************************
'**********************************************************************************
'3. 计算机组的操作
'**********************************************************************************
'3.1 显示所有的组
Sub ShowAllGroups(strDomain)
Dim Computer
Dim Group
Set Computer = GetObject("WinNT://" & strDomain)
Computer.Filter = Array("Group")
For Each Group in Computer
Response.Write Group.Name&"<br>"
Next
End Sub
'**********************************************************************************
'**********************************************************************************
'**********************************************************************************
'4. 特定用户情况操作
'**********************************************************************************
'4.1 显示用户的全名
Sub ShowUserFullname(strDomain,strUser)
Dim User
Set User = GetObject("WinNT://" & strDomain & "/" & strUser & ",user")
Response.write User.Fullname
End sub
'**********************************************************************************
'**********************************************************************************
'4.2 显示用户描述
Sub ShowUserDescription(strDomain,strUser)
Dim User
Set User = GetObject("WinNT://" & strDomain & "/" & strUser & ",user")
Response.write User.Description
End sub
'**********************************************************************************
'**********************************************************************************
'4.3 显示用户必须更改密码标记
Sub ShowUserMustChangePass(strDomain,strUser)
Dim User
Set User = GetObject("WinNT://" & strDomain & "/" & strUser & ",user")
Response.write User.Get("PasswordExpired") ' 为 1 意味着密码已失效,下次必须更改密码
End Sub
'**********************************************************************************
'**********************************************************************************
'4.4 显示用户不能改变密码标记
Sub ShowUserCannotChangePass(strDomain,strUser)
Dim User
Dim Flags
Set User = GetObject("WinNT://" & strDomain & "/" & strUser & ",user")
Flags = User.Get("UserFlags")
Response.write Flags And &H00040 ' 为 0 意味着用户有权更改密码
End sub
'**********************************************************************************
'**********************************************************************************
'4.5 显示密码从不过期标记
Sub ShowPassNeverExpires(strDomain,strUser)
Dim User
Dim Flags
Set User = GetObject("WinNT://" & strDomain & "/" & strUser & ",user")
Flags = User.Get("UserFlags")
Response.write Flags And &H10000 ' 为 0 意味着密码已过期
End sub
'**********************************************************************************
'**********************************************************************************
'4.6 显示用户密码的最小长度要求
Sub ShowUserPassMinLength(strDomain,strUser)
Dim User
Set User = GetObject("WinNT://" & strDomain & "/" & strUser & ",user")
Response.Write User.PasswordMinimumLength
End Sub
'**********************************************************************************
'**********************************************************************************
'4.7 显示用户是否必需密码
Sub ShowUserPassRequired(strDomain,strUser)
Dim User
Set User = GetObject("WinNT://" & strDomain & "/" & strUser & ",user")
Response.Write User.PasswordRequired
End Sub
'**********************************************************************************
'**********************************************************************************
'4.8 显示用户帐号已停用标记
Sub ShowUserAccountDisabled(strDomain,strUser)
Dim User
Set User = GetObject("WinNT://" & strDomain & "/" & strUser & ",user")
Response.Write User.AccountDisabled
End Sub
'**********************************************************************************
'**********************************************************************************
'4.9 显示用户帐号已锁定标记
Sub ShowUserAccountLockout(strDomain,strUser)
Dim User
Set User = GetObject("WinNT://" & strDomain & "/" & strUser & ",user")
Response.Write User.IsAccountLocked
End Sub
'**********************************************************************************
'**********************************************************************************
'4.10 显示用户帐号类型
Sub ShowUserAccountType(strDomain,strUser)
Dim User
Dim Flags
Set User = GetObject("WinNT://" & strDomain & "/" & strUser & ",user")
Flags = User.Get("UserFlags")
Response.write Flags And &H100 '// 0 意味着为GLOBAL,即不是本地帐号
End sub
'**********************************************************************************
'**********************************************************************************
'4.11 显示用户配置文件路径
Sub ShowUserProfilePath(strDomain,strUser)
Dim User
Set User = GetObject("WinNT://" & strDomain & "/" & strUser & ",user")
Response.Write User.Profile
End Sub
'**********************************************************************************
'**********************************************************************************
'4.12 显示用户登录脚本
Sub ShowUserLoginScript(strDomain,strUser)
Dim User
Set User = GetObject("WinNT://" & strDomain & "/" & strUser & ",user")
Response.Write User.LoginScript
End Sub
'**********************************************************************************
'**********************************************************************************
'4.13 显示用户主文件夹本地路径
Sub ShowUserHomeDirPath(strDomain,strUser)
Dim User
Set User = GetObject("WinNT://" & strDomain & "/" & strUser & ",user")
Response.Write User.HomeDirectory
End Sub
'**********************************************************************************
'**********************************************************************************
'4.14 显示用户主文件夹连接
Sub ShowUserHomeDirDrive(strDomain,strUser)
Dim User
Set User = GetObject("WinNT://" & strDomain & "/" & strUser & ",user")
Response.Write User.Get("HomeDirDrive")
End Sub
'**********************************************************************************
'**********************************************************************************
'4.15 显示用户帐号的失效日期(只适用NT 4.0)
Sub ShowUserAccountExpireDate(strDomain,strUser)
Dim User
Set User = GetObject("WinNT://" & strDomain & "/" & strUser & ",user")
Response.Write User.AccountExpirationDate
End Sub
'**********************************************************************************
'**********************************************************************************
'4.16 显示用户无效登录帐号(只适用NT 4.0)
Sub ShowUserBadLoginCount(strDomain,strUser)
Dim User
Set User = GetObject("WinNT://" & strDomain & "/" & strUser & ",user")
Response.Write User.BadLoginCount
End Sub
'**********************************************************************************
'**********************************************************************************
'4.17 显示用户上一次登录(只适用NT 4.0)
Sub ShowUserLastLogin(strDomain,strUser)
Dim User
Set User = GetObject("WinNT://" & strDomain & "/" & strUser & ",user")
Response.Write User.LastLogin
End Sub
'**********************************************************************************
'**********************************************************************************
'4.18 显示用户最上一次登出(只适用NT 4.0)
Sub ShowUserLastLogoff(strDomain,strUser)
Dim User
Set User = GetObject("WinNT://" & strDomain & "/" & strUser & ",user")
Response.Write User.LastLogoff
End Sub
'**********************************************************************************
'**********************************************************************************
'4.19 显示用户每次最长登录时间(只适用NT 4.0)
Sub ShowUserLogonHourRestriction(strDomain,strUser)
Dim User
Dim RegTime
Dim Restrict
Set User = GetObject("WinNT://" & strDomain & "/" & strUser & ",user")
For Each RegTime In User.LoginHours
If RegTime < 255 Then Restrict = True
Next
Response.write Restrict
End Sub
'**********************************************************************************
'**********************************************************************************
'**********************************************************************************
'5. 特定组情况的操作
'**********************************************************************************
'5.1 显示组内的所有用户
Sub ShowAllUserFromGroup(strDomain,strGroup)
Dim Group
Dim User
Set Group = GetObject("WinNT://" & strDomain & "/" & strGroup & ",group")
For Each User in Group.Members
Response.Write User.Name&"<br>"
Next
End Sub
'**********************************************************************************
'**********************************************************************************
'5.2 显示某用户是否在某个组中
Sub DispUserInGroup(strDomain,strGroup,strUser)
Dim Group
Dim User
Set Group = GetObject("WinNT://" & strDomain & "/" & strGroup & ",group")
Set User = GetObject("WinNT://" & strDomain & "/" & strUser & ",user")
Response.Write Group.IsMember(User.ADsPath)
End Sub
'**********************************************************************************
'**********************************************************************************
'5.2 显示组的描述
Sub ShowGroupDescription(strDomain,strGroup,strUser)
Dim Group
Set Group = GetObject("WinNT://" & strDomain & "/" & strGroup & ",group")
Response.Write Group.Description
End Sub
'**********************************************************************************
'**********************************************************************************
'5.3 显示用户所在的组
Sub DispUserInWhichGroup(strDomain,strGroup,strUser)
Dim Group
Dim User
Set User = GetObject("WinNT://" & strDomain & "/" & strUser & ",user")
For Each Group in User.Groups
Response.Write Group.Name&"<br>"
Next
End Sub
'**********************************************************************************
'**********************************************************************************
'5.4 增加某个用户到某个组
Sub AddUserToGroup(strDomain,strGroup,strUser)
Dim Group
Dim User
Set User = GetObject("WinNT://" & strDomain & "/" & strUser & ",user")
Set Group = GetObject("WinNT://" & strDomain & "/" & strGroup & ",group")
if not Group.IsMember(User.ADsPath) then
Group.Add(User.ADsPath)
end if
End Sub
'**********************************************************************************
%>
---- 網易之左右無人给我留言为了与更多的朋友交流,我已申请脚本技术版版卒 |
|