查询Active Directory用户连接共享驱动器的次数及最后连接时间
实现AD用户共享驱动器连接次数与最后连接时间的方案
一、获取最后连接时间(原生Windows方法)
- 启用文件服务器共享访问日志:
- 打开文件服务器的「本地组策略编辑器」(
gpedit.msc) - 导航到「计算机配置→Windows设置→安全设置→本地策略→审核策略」
- 启用「审核对象访问」的成功审核
- 对目标共享文件夹设置审核权限:右键共享→属性→安全→高级→审核→添加,选择需监控的AD用户/组,勾选「读取」「列出文件夹内容」等操作的成功审核
- 打开文件服务器的「本地组策略编辑器」(
- 用PowerShell提取最后连接时间:
# 替换为你的文件服务器名和共享路径 $serverName = "FILE-SERVER01" $sharePath = "\\FILE-SERVER01\SharedDocs" Get-WinEvent -ComputerName $serverName -FilterHashtable @{ LogName = "Security" ID = 5140 } | Where-Object { $_.Properties[4].Value -eq $sharePath } | Group-Object -Property @{Expression={$_.Properties[1].Value}} | ForEach-Object { [PSCustomObject]@{ Username = $_.Name LastConnectionTime = $_.Group.TimeCreated | Sort-Object -Descending | Select-Object -First 1 } }
二、统计连接次数(需额外监控配置)
Active Directory和Windows原生日志没有内置连接计数功能,需通过以下方式实现:
- 自定义PowerShell脚本+定时任务:
- 编写脚本定期读取安全日志中的5140事件,按用户和共享路径分组计数,结果存储到CSV或数据库
- 核心脚本片段:
$logStoragePath = "C:\ShareMonitor\ConnectionCounts.csv" $currentEvents = Get-WinEvent -FilterHashtable @{LogName="Security";ID=5140} | Select-Object @{n="Username";e={$_.Properties[1].Value}}, @{n="SharePath";e={$_.Properties[4].Value}}, TimeCreated # 读取已有计数记录 $existingCounts = if (Test-Path $logStoragePath) { Import-Csv $logStoragePath } else { @() } # 合并新事件与已有计数 $updatedCounts = $currentEvents | Group-Object Username,SharePath | ForEach-Object { $userSharePair = $_.Name -split ", " $existingRecord = $existingCounts | Where-Object { $_.Username -eq $userSharePair[0] -and $_.SharePath -eq $userSharePair[1] } $totalCount = if ($existingRecord) { [int]$existingRecord.Count + $_.Count } else { $_.Count } [PSCustomObject]@{ Username = $userSharePair[0] SharePath = $userSharePair[1] ConnectionCount = $totalCount LastConnectionTime = $_.Group.TimeCreated | Sort-Object -Descending | Select-Object -First 1 } } $updatedCounts | Export-Csv $logStoragePath -NoTypeInformation -Force- 将脚本设置为定时任务(如每小时执行一次),避免重复统计同一事件
- 企业级SIEM工具:如果有Splunk、Microsoft Sentinel等工具,可配置日志聚合规则,自动按用户和共享路径统计访问次数并生成报表
- 第三方文件监控工具:SolarWinds File Server Monitor、ManageEngine FileAudit等工具自带访问计数和时间追踪功能,无需手动编写脚本
三、注意事项
- 安全日志会占用磁盘空间,需配置日志轮转或定期清理策略
- 全局开启审核策略会增加服务器性能开销,建议仅对需要监控的共享文件夹启用
- 执行PowerShell脚本的账号需拥有「管理审核和安全日志」权限
内容的提问来源于stack exchange,提问作者Jordan Riley
相关产品推荐
相关产品推荐

