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

导出AD经理直属下属至独立CSV:PowerShell脚本问题求助

问题分析与修正方案

原脚本核心问题

  • 过滤逻辑失效:循环内的Get-ADUser未关联当前经理,而是筛选了所有拥有directReports属性的启用用户,导致所有CSV内容完全一致。
  • 文件名不友好:直接使用AD用户对象拼接文件名时,PowerShell会默认输出用户的DistinguishedName,生成冗长且不易识别的文件名。

修正后的PowerShell脚本

# 确保输出目录存在,不存在则创建
$outputDir = "C:\temp"
if (-not (Test-Path -Path $outputDir)) {
    New-Item -ItemType Directory -Path $outputDir | Out-Null
}

# 获取所有拥有直属下属的AD经理用户
$managers = Get-ADUser -Filter { directReports -ne $null } -Properties Name, DirectReports, SamAccountName

foreach ($manager in $managers) {
    # 处理文件名:替换Windows不允许的特殊字符
    $cleanFileName = $manager.Name -replace '[\\/:*?"<>|]', '_'
    $csvFilePath = Join-Path -Path $outputDir -ChildPath "$cleanFileName.csv"

    # 精准获取当前经理的直属启用下属
    $subordinates = $manager.DirectReports | ForEach-Object {
        Get-ADUser -Identity $_ -Properties DisplayName, Enabled | Where-Object { $_.Enabled -eq $true }
    } | Select-Object SamAccountName, DisplayName

    # 导出CSV,去掉类型信息并指定UTF8编码
    $subordinates | Export-Csv -Path $csvFilePath -NoTypeInformation -Encoding UTF8
}

关键改动说明

  • 精准获取下属:利用经理对象自带的DirectReports属性(存储下属的DN),直接通过Get-ADUser -Identity $_定位下属,避免全量AD查询,提升执行效率。
  • 过滤活跃账号:在获取下属时直接筛选Enabled -eq $true的用户,确保导出内容为有效活跃账号。
  • 友好文件名处理:使用经理的Name字段作为文件名基础,替换掉Windows系统禁止的特殊字符,避免文件名报错同时提升可读性。
  • 目录与编码优化:提前检查并创建输出目录,避免因目录缺失导致导出失败;添加-NoTypeInformation去除CSV头部冗余类型信息,指定-Encoding UTF8确保中文显示正常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 16:57:22