PowerShell查询AD多OU用户合并导出CSV仅显示单OU数据求助
问题根因
- 原脚本中你直接把AD用户查询结果通过管道传给了
Export-Csv命令,这个命令会把数据直接写入文件,不会返回结果给$users变量,所以两次对$users的赋值操作实际都没有拿到用户数据 Export-Csv默认会覆盖目标路径的现有文件,第二次执行导出时直接覆盖了第一次存的OU1数据,最终仅保留第二个OU的内容- 额外提示:你当前定义的
$OU1和$OU2内容完全一致,实际使用时请替换为真实的两个不同OU路径
可直接运行的修正脚本
# 定义需要查询的OU列表,用数组格式更规范,要加更多OU直接往数组里加就行 $OUList = @( "OU=Standard users,OU=US,DC=x1,DC=contoso,DC=com", "OU=Standard users,OU=AS,DC=x1,DC=contoso,DC=com" ) $users = @() # 遍历所有OU查询用户 foreach ($OU in $OUList) { $users += Get-ADUser -Filter * -SearchBase $OU -Properties name, userPrincipalName, accountExpires, distinguishedName, physicalDeliveryOfficeName | Select-Object name, userPrincipalName, accountExpires, distinguishedName, physicalDeliveryOfficeName } # 全量用户收集完成后统一导出CSV,加编码参数避免中文乱码 $users | Export-Csv -Path "c:\users\$env:USERNAME\desktop\2-OU-List.csv" -NoTypeInformation -Encoding UTF8
补充说明
- 不要用
-Properties *查询所有用户属性,会大幅拖慢查询速度,你需要用到哪些属性就明确指定就行,上面脚本的写法已经做了优化 - 如果你确实需要边查询边导出,可以在第二次执行
Export-Csv时加上-Append参数,就不会覆盖之前的内容,不过更推荐先收集完所有数据再统一导出,方便后续做去重、排序等处理 -NoTypeInformation参数可以去掉CSV开头多余的类型标识,导出的文件直接用Excel打开就能正常读取
内容的提问来源于stack exchange,提问作者New Kid on the block
相关产品推荐
相关产品推荐

