我试图获取特定时间范围内(例如,2012 年 10 月 10 日下午 2 点至 3 点之间)的用户列表及其登录时间(如果他们登录多次,则为 n 次)。
我一直在摆弄 powershell,但没有得到太多收获,从 Quest 下载了 PowerShell 扩展,尝试了一些片段,但找不到满足我需求的东西。
我的猜测是查询 Active Directory 服务器上的事件,但到目前为止还无法获得有效的代码片段。
答案1
@ansgar 是正确的,AD 仅存储每个帐户的最后登录时间 (lastlogontimestamp)。如果这对您来说足够了,这里有一个快速脚本,可以提取每个用户的 lastlogontimestamp 值:
$a = [adsisearcher]'(&(objectcategory=user)(objectclass=user))'
$a.PageSize = 1000
[void]$a.PropertiesToLoad.Add('name')
[void]$a.PropertiesToLoad.Add('lastlogontimestamp')
$a.FindAll() | ForEach-Object {
$op = '' | select name,llts
$op.name = $_.properties.name[0]
if($_.properties.lastlogontimestamp)
{
$op.llts=[datetime]::fromfiletime($_.properties.lastlogontimestamp[0])
}
else
{
$op.llts=$null
}
$op
} | Format-Table -AutoSize