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

如何将AD OU用户统计结果持续导出至Excel/CSV?

最优实现方案:PowerShell自动统计OU用户数并写入CSV

首先咱们先优化下你原来的AD查询逻辑——之前是先拉取所有用户再过滤启用状态,其实可以直接把启用条件整合到Get-ADUser的-Filter参数里,这样能大幅减少AD返回的数据量,运行效率会更高。

核心思路很清晰:统计两个OU的启用用户数→把日期、统计值封装成结构化对象→判断目标CSV文件状态(不存在就新建带表头,存在就追加数据)→保留你原有的邮件通知逻辑。

完整脚本示例

# 定义要统计的OU路径
$normalOuPath = "OU=Normal,OU=Benutzer und Computer,DC=my,DC=domain"
$specialOuPath = "OU=Special,OU=Benutzer und Computer,DC=my,DC=Domain"
# 定义CSV文件的保存路径(建议选固定的本地目录或共享文件夹)
$csvSavePath = "C:\UserStatistics\OUUserCountHistory.csv"

try {
    # 统计Normal OU的启用用户数(直接在Filter里筛选启用状态,更高效)
    $normalEnabledCount = (Get-ADUser -SearchBase $normalOuPath -Filter { Enabled -eq $true }).Count
    # 统计Special OU的启用用户数
    $specialEnabledCount = (Get-ADUser -SearchBase $specialOuPath -Filter { Enabled -eq $true }).Count
    # 获取当前月份(格式MM-yyyy)
    $currentMonth = Get-Date -Format "MM-yyyy"

    # 构造要写入CSV的结构化对象
    $statsRecord = [PSCustomObject]@{
        "日期"             = $currentMonth
        "Special OU用户数" = $specialEnabledCount
        "Normal OU用户数"  = $normalEnabledCount
    }

    # 处理CSV写入逻辑:文件不存在则创建(自动生成表头),存在则追加数据
    if (-not (Test-Path -Path $csvSavePath)) {
        # 先创建父目录(如果不存在的话)
        $null = New-Item -Path (Split-Path $csvSavePath -Parent) -ItemType Directory -Force
        $statsRecord | Export-Csv -Path $csvSavePath -Encoding UTF8 -NoTypeInformation -Delimiter ","
    } else {
        $statsRecord | Export-Csv -Path $csvSavePath -Encoding UTF8 -NoTypeInformation -Delimiter "," -Append
    }

    # 保留你原有的邮件发送逻辑(这里给个示例模板)
    $mailSettings = @{
        From       = "ou-stats@my.domain"
        To         = "your-email@my.domain"
        Subject    = "[$currentMonth] OU启用用户统计结果"
        Body       = "统计日期:$currentMonth`nSpecial OU启用用户数:$specialEnabledCount`nNormal OU启用用户数:$normalEnabledCount"
        SmtpServer = "smtp.my.domain"
    }
    Send-MailMessage @mailSettings

    Write-Host "统计完成,数据已写入CSV并发送通知邮件"
} catch {
    Write-Error "执行过程出错:$_"
    # 可选:添加错误通知邮件逻辑,方便及时排查问题
}

为什么优先选CSV而不是Excel?

  • 无依赖:不需要安装Excel或Office组件,PowerShell原生支持,在服务器上也能稳定运行
  • 低风险:不会出现Excel文件被占用导致写入失败的情况,追加数据逻辑简单可靠
  • 兼容性强:CSV可以直接用Excel、记事本、Power BI等工具打开查看或做后续分析

自动化部署建议

用Windows任务计划程序每月自动运行脚本:

  1. 创建新任务,触发条件设为「每月」,选择你需要的运行日期和时间
  2. 操作选择「启动程序」,程序/脚本填powershell.exe,参数填-ExecutionPolicy Bypass -File "C:\Scripts\YourScriptName.ps1"(替换成你的脚本实际路径)
  3. 确保任务运行的账号拥有AD读取权限和CSV路径的读写权限

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:31:41