PowerShell导入CSV用户列表导出所属组失败,求助排查
解决导入用户CSV并导出AD组信息的问题
错误原因分析
你遇到的Get-AdUser : The search filter cannot be recognized错误,核心问题有两个:
- 原脚本调用了
$_.username,但你的CSV里根本没有username字段,导致筛选器内容无效 - 姓名中的特殊字符(如Ø、Ö)直接写入筛选器时,可能因编码问题导致AD无法识别
修正后的脚本
以下是适配你CSV结构的PowerShell脚本,会优先用ID查询AD用户,查不到则尝试拼接姓名查询,最后导出包含用户信息和所属AD组的CSV:
# 导入用户列表CSV $userList = Import-Csv -Path ".\dab.csv" -Encoding UTF8 # 存储最终结果 $outputData = @() foreach ($item in $userList) { # 优先用ID作为SamAccountName查询AD用户(如果ID是域账号) $adUser = Get-ADUser -Filter "SamAccountName -eq '$($item.ID)'" -Properties MemberOf -ErrorAction SilentlyContinue # 若ID查询失败,尝试用拼接的全名作为DisplayName查询 if (-not $adUser) { $fullName = "$($item.FName.Trim()) $($item.LName.Trim())" $adUser = Get-ADUser -Filter "DisplayName -eq '$fullName'" -Properties MemberOf -ErrorAction SilentlyContinue } if ($adUser) { # 获取所有所属AD组的名称,用分号分隔 $groupNames = $adUser.MemberOf | ForEach-Object { (Get-ADGroup $_).Name } -join ";" $outputItem = [PSCustomObject]@{ ID = $item.ID FName = $item.FName LName = $item.LName ADGroups = $groupNames } } else { # 记录未在AD中找到的用户 $outputItem = [PSCustomObject]@{ ID = $item.ID FName = $item.FName LName = $item.LName ADGroups = "AD中未找到该用户" } } $outputData += $outputItem } # 导出结果到新CSV,用UTF8编码避免乱码 $outputData | Export-Csv -Path ".\用户AD组查询结果.csv" -NoTypeInformation -Encoding UTF8
关键注意事项
- 如果你的ID不是域账号的SamAccountName,比如是员工号,把筛选器改成
"EmployeeID -eq '$($item.ID)'" - 确保CSV文件编码是UTF8,避免特殊字符乱码
- 脚本需要在已加入域的机器上运行,且当前用户有AD查询权限
内容的提问来源于stack exchange,提问作者DabServ
相关产品推荐
相关产品推荐

