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

如何用PowerShell为CSV文件新增samAccountName列?技术求助

解决CSV新增samAccountName列的问题

你的代码存在几个关键问题:

  • 循环内每次输出整个CSV数据集,而非当前处理的单行
  • AD用户查询的过滤器变量引用错误,导致无法正确匹配用户
  • 使用Set-Content而非Export-Csv处理CSV输出,格式会出错

以下是修正后的完整代码:

# 导入CSV文件,指定分隔符为分号
$CSVData = Import-Csv 'C:\test.csv' -Delimiter ';'

# 遍历每一行数据,查询对应的samAccountName并添加列
$CSVData | ForEach-Object {
    # 安全构建AD查询过滤器,避免变量注入问题
    $filter = "GivenName -eq '$($_.Name)' -and SurName -eq '$($_.Surname)'"
    # 查询AD用户并获取samAccountName,没有匹配时返回空值
    $samAccountName = Get-ADUser -Filter $filter -ErrorAction SilentlyContinue | Select-Object -ExpandProperty SamAccountName

    # 输出添加新列后的当前行数据
    $_ | Select-Object *, @{Name='samAccountName'; Expression={$samAccountName}}
} | Export-Csv 'C:\output.csv' -Delimiter ';' -NoTypeInformation

关键说明:

  • 使用ForEach-Object管道处理,确保每行数据单独处理并输出
  • 过滤器中用$($_.Name)正确插入变量值,避免字符串解析错误
  • 添加-ErrorAction SilentlyContinue避免查询不到用户时抛出错误
  • 用Export-Csv替代Set-Content,保证输出标准CSV格式,-NoTypeInformation会去掉PowerShell默认添加的类型信息行
  • 如果存在重名用户,可结合邮箱字段优化过滤器,比如:
    $filter = "GivenName -eq '$($_.Name)' -and SurName -eq '$($_.Surname)' -and EmailAddress -eq '$($_.EMail)'"
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 10:57:11