精华区 [关闭][返回]

当前位置:网易精华区>>讨论区精华>>编程开发>>● ASP>>组件应用>>ADSI & 目录服务>>ADSI活动目录服务技术之一(WinNT)代码库

主题:ADSI活动目录服务技术之一(WinNT)代码库
发信人: 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
'**********************************************************************************
%>

 



----
網易之左右無人给我留言为了与更多的朋友交流,我已申请脚本技术版版卒 

[关闭][返回]