如何跟踪 AD 用户上次 accessed/mapped 共享文件夹的日期和时间
How to track the date and time when AD users last accessed/mapped a shared folder
我正在尝试获取 Windows 服务器中定义的所有用户的列表,以及上次登录服务器或 mapped/accessed 文件共享的日期时间。
为此,我尝试了以下脚本:
Get-ADUser -Filter * -SearchBase "dc=whatever,dc=local" -ResultPageSize 0 -Prop CN,samaccountname,LastLogonTimestamp | Select CN,samaccountname,@{N='LastLogon'; E={[DateTime]::FromFileTime($_.LastLogonTimestamp)}}
这为我提供了以下输出:
CN samaccountname LastLogon
-- -------------- -----------
Administrador Administrador 08/02/2019 17:30:00
Invitado Invitado 01/01/1601 1:00:00
krbtgt krbtgt 01/01/1601 1:00:00
Maite maite 01/01/1601 1:00:00
Mari Carmen mcarmen 01/01/1601 1:00:00
Emilio emilio 01/01/1601 1:00:00
Erica erica 01/01/1601 1:00:00
我知道除了 Administrator 之外的其他用户访问了服务器文件共享(其中一些用户每天将它们映射为驱动器),但是列表中获得的唯一有效登录日期是 Adminstrator。
这个命令似乎只在用户通过 RDP 或控制台实际登录服务器时才报告。
每次用户访问任何服务器共享时,我如何获得类似的查询来报告?
您的文件共享访问创建了一个网络登录(登录类型 3),它不影响 LastLogon
属性(和 LastLogonTimestamp
分别)。在这种情况下,您必须从记录所有登录的域控制器事件日志中获取信息。以下脚本将输出任何用户的最后登录日期,其登录类型为最近 24 小时。
#86400000 = 24h
$FilterXPath = '*[System[EventID=4624 and TimeCreated[timediff(@SystemTime) <= 86400000]]]'
$LogonEvents = Get-WinEvent -LogName Security -FilterXPath $FilterXPath
$Logons = foreach ($LogonEvent in $LogonEvents) {
[PSCustomObject]@{
LogonDate = $LogonEvent.TimeCreated
UserName = $LogonEvent.Properties[5].Value
UserDomain = $LogonEvent.Properties[6].Value
LogonType = $LogonEvent.Properties[8].Value
}
}
$LogonsGroupedByUserName = $Logons | Group-Object -Property UserName
foreach ($Group in $LogonsGroupedByUserName) {
$Group.Group |
Sort-Object -Property LogonDate -Descending |
Select-Object -First 1
}
我正在尝试获取 Windows 服务器中定义的所有用户的列表,以及上次登录服务器或 mapped/accessed 文件共享的日期时间。 为此,我尝试了以下脚本:
Get-ADUser -Filter * -SearchBase "dc=whatever,dc=local" -ResultPageSize 0 -Prop CN,samaccountname,LastLogonTimestamp | Select CN,samaccountname,@{N='LastLogon'; E={[DateTime]::FromFileTime($_.LastLogonTimestamp)}}
这为我提供了以下输出:
CN samaccountname LastLogon
-- -------------- -----------
Administrador Administrador 08/02/2019 17:30:00
Invitado Invitado 01/01/1601 1:00:00
krbtgt krbtgt 01/01/1601 1:00:00
Maite maite 01/01/1601 1:00:00
Mari Carmen mcarmen 01/01/1601 1:00:00
Emilio emilio 01/01/1601 1:00:00
Erica erica 01/01/1601 1:00:00
我知道除了 Administrator 之外的其他用户访问了服务器文件共享(其中一些用户每天将它们映射为驱动器),但是列表中获得的唯一有效登录日期是 Adminstrator。
这个命令似乎只在用户通过 RDP 或控制台实际登录服务器时才报告。
每次用户访问任何服务器共享时,我如何获得类似的查询来报告?
您的文件共享访问创建了一个网络登录(登录类型 3),它不影响 LastLogon
属性(和 LastLogonTimestamp
分别)。在这种情况下,您必须从记录所有登录的域控制器事件日志中获取信息。以下脚本将输出任何用户的最后登录日期,其登录类型为最近 24 小时。
#86400000 = 24h
$FilterXPath = '*[System[EventID=4624 and TimeCreated[timediff(@SystemTime) <= 86400000]]]'
$LogonEvents = Get-WinEvent -LogName Security -FilterXPath $FilterXPath
$Logons = foreach ($LogonEvent in $LogonEvents) {
[PSCustomObject]@{
LogonDate = $LogonEvent.TimeCreated
UserName = $LogonEvent.Properties[5].Value
UserDomain = $LogonEvent.Properties[6].Value
LogonType = $LogonEvent.Properties[8].Value
}
}
$LogonsGroupedByUserName = $Logons | Group-Object -Property UserName
foreach ($Group in $LogonsGroupedByUserName) {
$Group.Group |
Sort-Object -Property LogonDate -Descending |
Select-Object -First 1
}