首页 | 邮件资讯 | 技术教程 | 解决方案 | 产品评测 | 邮件人才 | 邮件博客 | 邮件系统论坛 | 软件下载 | 邮件周刊 | 热点专题 | 工具
网络技术 | 操作系统 | 邮件系统 | 客户端 | 电子邮箱 | 反垃圾邮件 | 邮件安全 | 邮件营销 | 移动电邮 | 邮件软件下载 | 电子书下载

操作系统

Windows 9X | Linux&Uinx | Windows Server | 其它操作系统 | Vista | FreeBSD | Windows 7 |
首页 > 操作系统 > Windows Server > 如何批量统计AD账户最后一次登录时间 > 正文

如何批量统计AD账户最后一次登录时间

出处:blog.csdn.net/xuhuojun 作者:徐火军 时间:2011-9-29 15:01:44

在许多IT企业由于管理不善,AD用户账号出现大量过期或不在使用中的账户,如何有效导出这些用户账户最后一次登录时间,经过IT部确认之后再删除这些用户,而不是直接删除XX天前未登录的用户(比如有些账户不一定需要登录,但却非常重要,比如一些邮箱账户或资源账户),微软提供了CSDEV工具,这个工具可以导出用户属性的Lastlogon,但是导出的结果有一个问题,是一串的数字,需要经过多次转换才能变成相应的日期和时间(转换方法可以参考:http://www.mcse.org.cn/showtopic-6953.html),有没有更好的办法,当然有,而且还不少,比较利用工具truelastlogon,reallastlogon,oldcmp,除此之外还有更好的方法就是VBS脚本,下面以一个叫lastlogon.vbs脚本为例,内容如下:

 

Option Explicit

 

Dim objRootDSE, strConfig, adoConnection, adoCommand, strQuery

Dim adoRecordset, objDC

Dim strDNSDomain, objShell, lngBiasKey, lngBias, k, arrstrDCs()

Dim strDN, dtmDate, objDate, objList, strUser

Dim strBase, strFilter, strAttributes, lngHigh, lngLow

 

' Use a dictionary object to track latest lastLogon for each user.

Set objList = CreateObject("Scripting.Dictionary")

objList.CompareMode = vbTextCompare

 

' Obtain local Time Zone bias from machine registry.

' This bias changes with Daylight Savings Time.

Set objShell = CreateObject("Wscript.Shell")

lngBiasKey = objShell.RegRead("HKLM\System\CurrentControlSet\Control\" _

    & "TimeZoneInformation\ActiveTimeBias")

If (UCase(TypeName(lngBiasKey)) = "LONG") Then

    lngBias = lngBiasKey

ElseIf (UCase(TypeName(lngBiasKey)) = "VARIANT()") Then

    lngBias = 0

    For k = 0 To UBound(lngBiasKey)

        lngBias = lngBias + (lngBiasKey(k) * 256^k)

    Next

End If

 

' Determine configuration context and DNS domain from RootDSE object.

Set objRootDSE = GetObject("LDAP://RootDSE")

strConfig = objRootDSE.Get("configurationNamingContext")

strDNSDomain = objRootDSE.Get("defaultNamingContext")

 

' Use ADO to search Active Directory for ObjectClass nTDSDSA.

' This will identify all Domain Controllers.

Set adoCommand = CreateObject("ADODB.Command")

Set adoConnection = CreateObject("ADODB.Connection")

adoConnection.Provider = "ADsDSOObject"

adoConnection.Open "Active Directory Provider"

adoCommand.ActiveConnection = adoConnection

 

strBase = "<LDAP://" & strConfig & ">"

strFilter = "(objectClass=nTDSDSA)"

strAttributes = "AdsPath"

strQuery = strBase & ";" & strFilter & ";" & strAttributes & ";subtree"

 

adoCommand.CommandText = strQuery

adoCommand.Properties("Page Size") = 100

adoCommand.Properties("Timeout") = 60

adoCommand.Properties("Cache Results") = False

 

Set adoRecordset = adoCommand.Execute

 

' Enumerate parent objects of class nTDSDSA. Save Domain Controller

' AdsPaths in dynamic array arrstrDCs.

k = 0

Do Until adoRecordset.EOF

    Set objDC = _

        GetObject(GetObject(adoRecordset.Fields("AdsPath").Value).Parent)

    ReDim Preserve arrstrDCs(k)

    arrstrDCs(k) = objDC.DNSHostName

    k = k + 1

    adoRecordset.MoveNext

Loop

adoRecordset.Close

 

' Retrieve lastLogon attribute for each user on each Domain Controller.

For k = 0 To Ubound(arrstrDCs)

    strBase = "<LDAP://" & arrstrDCs(k) & "/" & strDNSDomain & ">"

    strFilter = "(&(objectCategory=person)(objectClass=user))"

    strAttributes = "distinguishedName,lastLogon"

    strQuery = strBase & ";" & strFilter & ";" & strAttributes _

        & ";subtree"

    adoCommand.CommandText = strQuery

    On Error Resume Next

    Set adoRecordset = adoCommand.Execute

    If (Err.Number <> 0) Then

        On Error GoTo 0

        Wscript.Echo "Domain Controller not available: " & arrstrDCs(k)

    Else

        On Error GoTo 0

        Do Until adoRecordset.EOF

            strDN = adoRecordset.Fields("distinguishedName").Value

            On Error Resume Next

            Set objDate = adoRecordset.Fields("lastLogon").Value

            If (Err.Number <> 0) Then

                On Error GoTo 0

                dtmDate = #1/1/1601#

            Else

                On Error GoTo 0

                lngHigh = objDate.HighPart

                lngLow = objDate.LowPart

                If (lngLow < 0) Then

                    lngHigh = lngHigh + 1

                End If

                If (lngHigh = 0) And (lngLow = 0) Then

                    dtmDate = #1/1/1601#

                Else

                    dtmDate = #1/1/1601# + (((lngHigh * (2 ^ 32)) _

                        + lngLow)/600000000 - lngBias)/1440

                End If

            End If

            If (objList.Exists(strDN) = True) Then

                If (dtmDate > objList(strDN)) Then

                    objList.Item(strDN) = dtmDate

                End If

            Else

                objList.Add strDN, dtmDate

            End If

            adoRecordset.MoveNext

        Loop

        adoRecordset.Close

    End If

Next

 

' Output latest lastLogon date for each user.

For Each strUser In objList.Keys

    If (objList.Item(strUser) = #1/1/1601#) Then

        Wscript.Echo strUser & ";Never"

    Else

        Wscript.Echo strUser & ";" & objList.Item(strUser)

    End If

Next

 

' Clean up.

adoConnection.Close

 

这个脚本我们不要直接运行,否则我们只能看到屏幕多次弹出每个用户最后一次登录时间,我们把这个结果重定向到一个文件中去,执行下面步骤:

C:\>cscript lastlogon.vbs>lastlogon.csv

 

执行完毕生成一个CSV文件,打开此文件,可以看到最后1次登录时间,个人测试的结果文档内容如下:

 

 从上图很容易看出最后一次登录时间,有些用户从来没有登录也会显示在上面。(如果想把最后一次登录时间作为独立一列分离出来,用Excel也非常容易实现,在此不再强调。)

相关文章 热门文章
  • 批量修改AD账户与属性
  • 批量修改AD账号Account
  • 删除AD用户或修改用户属性后outlook通讯簿不能同步问题.
  • Gmail实验室预览面板功能 效果如iPad查Gmail
  • Radware ADC系列方案支持微软Exchange Server 2010
  • BlackBerry Enterprise Server BlackBerry Administration API文件泄露漏洞
  • 如何在iPhone/iPod touch/iPad邮件应用程序Mail中使用QQ邮箱Exchange移动终端同步服务?
  • 避免AD攻击 防止密码破解和其它常用目录攻击
  • AD 1058与1030错误日志过多解决办法
  • AD灾难恢复
  • 通过脚本实现AD用户自动连接打印机与共享文件夹
  • 实现微软AD与Domino OA系统的互连互用
  • “http 500内部服务器错误”的解决方法
  • 利用Windows 2000 Server的RRAS实现VPN服务器
  • 用凤凰万能启动盘解决本地/域管理员密码丢失
  • Win2003 Server企业版安装配置
  • Active directory 灾难恢复
  • Windows 2000/03域和活动目录
  • 如何在vmware4上创建windows 2003群集
  • MSI文件制作全过程
  • Win2000命令全集(一)
  • Windows 2000/AD技巧
  • 此系统的本地策略不允许您采用交互式登录解决方法
  • Win2000路由的安装与设置实现不同网段互通
  • 自由广告区
     
    最新软件下载
  • win2003 exchange2003 迁移到win2008r...
  • exchange 2003迁移到exchange 2010图文..
  • Exchange 2003 迁移至Exchange 2010 完..
  • Acronis Disk Director 10
  • Paragon Partition Manager 7.0汉化版
  • Password Expiration Notifier 2.0
  • Exchange Server 2003/7升级到Exchang...
  • Exchange Server 2010安全性-防垃圾邮...
  • Exchange Server 2010信息归档和保留&...
  • Exchange Server 2010信息保护和控制
  • Exchange Server 2010的高可用性-DAG(...
  • Exchange Server 2010的高可用性-DAG(...
  • 今日邮件技术文章
  • 如何批量统计AD账户最后一次登录时间
  • 批量修改AD账户与属性
  • 批量修改AD账号Account
  • Exchange 2003 迁移至 Exchange 2010 ...
  • Exchange Server 2010迁移的注意事项
  • Exchange 2010 反垃圾邮件 防病毒
  • Exchange 2010 备份与恢复
  • Exchange 2010 数据库结构
  • 迁移到Exchange Server 2010的技术实战
  • Exchange Server 2003升级到2010的步骤
  • 企业邮箱被盗用?TurboMail全方位解决
  • 打错地址导致电子邮件泄露 研究人员称...
  • 最新专题
  • 鸟哥的Linux私房菜之Mail服务器
  • Exchange Server 2010技术专题
  • Windows 7 技术专题
  • Sendmail 邮件系统配置
  • 组建Exchange 2003邮件系统
  • Windows Server 2008 专题
  • ORF 反垃圾邮件系统
  • Exchange Server 2007 专题
  • ISA Server 2006 教程专题
  • Windows Vista 技术专题
  • “黑莓”(BlackBerry)专题
  • Apache James 专题
  • 分类导航
    邮件新闻资讯:
    IT业界 | 邮件服务器 | 邮件趣闻 | 移动电邮
    电子邮箱 | 反垃圾邮件|邮件客户端|网络安全
    行业数据 | 邮件人物 | 网站公告 | 行业法规
    网络技术:
    邮件原理 | 网络协议 | 网络管理 | 传输介质
    线路接入 | 路由接口 | 邮件存储 | 华为3Com
    CISCO技术 | 网络与服务器硬件
    操作系统:
    Windows 9X | Linux&Uinx | Windows NT
    Windows Vista | FreeBSD | 其它操作系统
    邮件服务器:
    程序与开发 | Exchange | Qmail | Postfix
    Sendmail | MDaemon | Domino | Foxmail
    KerioMail | JavaMail | Winwebmail |James
    Merak&VisNetic | CMailServer | WinMail
    金笛邮件系统 | 其它 |
    反垃圾邮件:
    综述| 客户端反垃圾邮件|服务器端反垃圾邮件
    邮件客户端软件:
    Outlook | Foxmail | DreamMail| KooMail
    The bat | 雷鸟 | Eudora |Becky! |Pegasus
    IncrediMail |其它
    电子邮箱: 个人邮箱 | 企业邮箱 |Gmail
    移动电子邮件:服务器 | 客户端 | 技术前沿
    邮件网络安全:
    软件漏洞 | 安全知识 | 病毒公告 |防火墙
    攻防技术 | 病毒查杀| ISA | 数字签名
    邮件营销:
    Email营销 | 网络营销 | 营销技巧 |营销案例
    邮件人才:招聘 | 职场 | 培训 | 指南 | 职场
    解决方案:
    邮件系统|反垃圾邮件 |安全 |移动电邮 |招标
    产品评测:
    邮件系统 |反垃圾邮件 |邮箱 |安全 |客户端
    广告联系 | 合作联系 | 关于我们 | 联系我们 | 繁體中文
    版权所有:邮件技术资讯网©2003-2010 www.5dmail.net, All Rights Reserved
    www.5Dmail.net Web Team   粤ICP备05009143号