You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

查询Active Directory用户连接共享驱动器的次数及最后连接时间

实现AD用户共享驱动器连接次数与最后连接时间的方案

一、获取最后连接时间(原生Windows方法)

  • 启用文件服务器共享访问日志:
    1. 打开文件服务器的「本地组策略编辑器」(gpedit.msc)
    2. 导航到「计算机配置→Windows设置→安全设置→本地策略→审核策略」
    3. 启用「审核对象访问」的成功审核
    4. 对目标共享文件夹设置审核权限:右键共享→属性→安全→高级→审核→添加,选择需监控的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脚本+定时任务:
    1. 编写脚本定期读取安全日志中的5140事件,按用户和共享路径分组计数,结果存储到CSV或数据库
    2. 核心脚本片段:
    $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
    
    1. 将脚本设置为定时任务(如每小时执行一次),避免重复统计同一事件
  • 企业级SIEM工具:如果有Splunk、Microsoft Sentinel等工具,可配置日志聚合规则,自动按用户和共享路径统计访问次数并生成报表
  • 第三方文件监控工具:SolarWinds File Server Monitor、ManageEngine FileAudit等工具自带访问计数和时间追踪功能,无需手动编写脚本

三、注意事项

  • 安全日志会占用磁盘空间,需配置日志轮转或定期清理策略
  • 全局开启审核策略会增加服务器性能开销,建议仅对需要监控的共享文件夹启用
  • 执行PowerShell脚本的账号需拥有「管理审核和安全日志」权限

内容的提问来源于stack exchange,提问作者Jordan Riley

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 12:35:06