PowerShell 查询域用户和本地用户加入组的时间和最后登录信息
2016-02-19 10:36
573 查看
看见论坛里有人问如何查询域用户,本地用户在对应组的加入时间,以及他们最后登录的时间。
豆子写了个小脚本来实现。
对于域用户,最后登录时间很容易,get-aduser就能获取了。注意一下时间格式转换
域用户加入组的时间需要在对应的DC上查询metadata。比如查询域管理员都是什么时候加入这个组的
结果如下
本地用户的登录时间需要用 adsi来查询。在AD 模块开发之前,管理员只能用ADSI来操纵AD和本地对象。现在操作AD可以直接用模块了,但是本地的貌似还得用ADSI才行。
比如查询本机的所有本地用户的上一次登录时间
最后,如果需要查询本地用户加入或者退出组的时间,我没有找到现成的命令,只能通过日志来查询了。
首先需要gpo里面打开审计功能。
重启电脑之后就可以了。本地的组添加用户会生成4732的日志,删除会生成4733的日志。我只需要查询对应的日志,并解析XML文件就行了。
结果如下
本文出自 “麻婆豆腐” 博客,请务必保留此出处http://beanxyz.blog.51cto.com/5570417/1743238
豆子写了个小脚本来实现。
对于域用户,最后登录时间很容易,get-aduser就能获取了。注意一下时间格式转换
PS C:\WINDOWS\system32> get-aduser yli -Properties lastlogon | select name, @{n="Lastlogon";e={[datetime]::FromFileTime($_.lastlogon)}}结果如下
域用户加入组的时间需要在对应的DC上查询metadata。比如查询域管理员都是什么时候加入这个组的
$pdc=Get-ADDomainController -Discover -Service PrimaryDC $dn=(get-adgroup "domain admins").distinguishedname Get-ADReplicationAttributeMetadata $dn -Server $pdc -ShowAllLinkedValues | Where-Object {$_.attributename -eq 'member'} | select FirstOriginatingcreatetime, attributevalue
结果如下
本地用户的登录时间需要用 adsi来查询。在AD 模块开发之前,管理员只能用ADSI来操纵AD和本地对象。现在操作AD可以直接用模块了,但是本地的貌似还得用ADSI才行。
比如查询本机的所有本地用户的上一次登录时间
$adsi = [ADSI]"WinNT://$env:COMPUTERNAME" $adsi.Children | where {$_.SchemaClassName -eq 'user'} | select name,Lastlogin
最后,如果需要查询本地用户加入或者退出组的时间,我没有找到现成的命令,只能通过日志来查询了。
首先需要gpo里面打开审计功能。
重启电脑之后就可以了。本地的组添加用户会生成4732的日志,删除会生成4733的日志。我只需要查询对应的日志,并解析XML文件就行了。
#查询本机日志 $eventcritea = @{logname='security';id=4732} $Events =get-winevent -ComputerName $env:COMPUTERNAME -FilterHashtable $eventcritea #$Events = Get-WinEvent -ComputerName syddc01 -Filterxml $xmlfilter $result=@() # 解析日志 ForEach ($Event in $Events) { # Convert the event to XML $eventXML = [xml]$Event.ToXml() $groupname=$eventXML.Event.EventData.Data[2].'#text'.ToString() $sid= $eventXML.Event.EventData.Data[1].'#text'.ToString() #转换SID到用户名 $objSID = New-Object System.Security.Principal.SecurityIdentifier($sid) $objUser = $objSID.Translate( [System.Security.Principal.NTAccount]) #保存结果到自定义的一个对象 $temp=[pscustomobject]@{Time=$Event.TimeCreated;Username=$objUser.Value;GroupName=$groupname} $result+=$temp } $result
结果如下
本文出自 “麻婆豆腐” 博客,请务必保留此出处http://beanxyz.blog.51cto.com/5570417/1743238
相关文章推荐
- 使用PowerShell来查看计算机与用户的最后登录时间
- 查询某段时间用户登录信息,并且当前版本不是1.72
- 显示日期和时间,列出所有登录的用户,给出系统的更新时间,最后将所有信息保存到日志文件中
- 域用户开机自动加入本地管理员组VBS脚本+限制多点登录
- CentOS下查看最后登录的用户信息以及LOG记录
- 域用户开机自动加入本地管理员组VBS脚本+限制多点登录
- powershell查看计算机最后登录时间
- 查询AD用户最后具体登陆时间
- crmsql查询用户登录信息
- 脚本实现记录所有登录用户的信息,包括用户名、登录时间和登录位置
- 用户/组总结管理(3)——查询用户信息或登录情况的命令
- 利用html5的本地存储功能实现登录用户信息保存
- 关于本地缓存登陆 和 域用户将计算机加入域的问题及登录过程- -
- 地磅称量系统之(27~29)实现主界面显示用户的登录信息和日期时间星期的代码
- 银行管理系统 实现用户注册 登录 存、取款 交易记录查询和修改用户信息等功能
- 在用户登录日志中查询某个时间里面在线用户数量
- 查询目前已登录的用户,用户最近登录的时间
- [5月29日的脚本] 检索远程机器上所有本地用户的账户信息 (PowerShell)
- Oracle查询所有用户表的最后修改时间
- HTML5本地储存追加利用html5的本地存储功能实现登录用户信息保存