Active Directory PowerShell脚本查询计算机信息无法写入CSV求助
解决PowerShell查询AD计算机信息无CSV输出的问题
你脚本里的几个关键错误导致了无输出,逐一修正如下:
核心问题分析
- 查错了对象类型:你要查询的是AD里的计算机,但用了
Get-ADUser(这是查询用户的命令),根本拿不到计算机数据。 - 过滤逻辑完全跑偏:需求是用CSV里的计算机名称查AD,但你用了CSV里的
Description字段做过滤,而且直接把多行CSV数据塞到过滤条件里,生成的语法AD根本识别不了。 - 重复读取CSV:没必要两次执行
Import-Csv,一次读入即可。 - 没处理OU提取:你要的是组织单元,但原脚本只存了完整的
DistinguishedName,没提取出实际的OU路径。
修正后的完整脚本
# 定义CSV文件路径 $filePath = "C:\Temp\Description.csv" # 读取CSV中的计算机名称列表 $computerList = Import-Csv $filePath # 构建AD查询的过滤条件:匹配所有CSV中的计算机名称 $filter = $computerList.Name | ForEach-Object { "Name -eq '$($_)'" } | Join-String -Separator " -or " # 查询AD计算机对象,获取描述和DN属性 $adComputers = Get-ADComputer -Filter $filter -Properties Description, DistinguishedName | Select-Object Name, Description, # 从DN中提取OU部分作为单独字段 @{Name='OrganizationalUnit'; Expression={ $dnSegments = $_.DistinguishedName -split ',' $ouSegments = $dnSegments | Where-Object { $_ -like 'OU=*' } $ouSegments -join ',' }} # 匹配原始CSV数据,填充查询结果 foreach ($row in $computerList) { $matched = $adComputers | Where-Object { $_.Name -eq $row.Name } if ($matched) { $row.Description = $matched.Description $row.OrganizationalUnit = $matched.OrganizationalUnit } else { # 标记未找到的计算机 $row.Description = "AD中无此计算机记录" $row.OrganizationalUnit = "未找到" } } # 将结果写入CSV(UTF8编码避免乱码) $computerList | Export-Csv $filePath -NoTypeInformation -Encoding UTF8
关键修正说明
- 用对AD命令:换成
Get-ADComputer专门查询计算机对象,确保能拿到正确数据。 - 正确构建过滤条件:把CSV里的每个计算机名称转换成
Name -eq 'XXX'的格式,再用-or拼接,让AD能正确查询所有目标计算机。 - 提取OU路径:通过拆分
DistinguishedName字符串,筛选出所有OU=开头的部分,组合成清晰的OU路径。 - 增加容错处理:对AD中找不到的计算机做标记,避免结果缺失。
- 编码优化:加上
-Encoding UTF8,防止CSV出现乱码问题。
内容的提问来源于stack exchange,提问作者Jeff
相关产品推荐
相关产品推荐

