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

编写脚本实现CSV与AD中PC名称双向比对并导出不匹配项

CSV与AD计算机名称双向比对脚本解决方案

问题分析

你之前用like/notlike出现结果异常,核心原因是模糊匹配易产生误判,且没统一AD与CSV中计算机名的格式(AD默认计算机名带$后缀,CSV通常不带)。改用精确匹配的-in/-notin并统一名称格式,就能得到准确结果。

完整脚本示例

# 1. 读取CSV数据源,替换为你的CSV路径与列名(假设列名为ComputerName)
$csvComputers = (Import-Csv -Path "C:\Assets\source_devices.csv").ComputerName | Where-Object { $_ -ne $null }

# 2. 获取AD中的计算机名,统一格式:去掉默认的$后缀(若CSV带$则删除此行的TrimEnd操作)
$adComputers = (Get-ADComputer -Filter *).Name | ForEach-Object { $_.TrimEnd('$') } | Where-Object { $_ -ne $null }

# 3. 提取两类不匹配结果
# CSV中有但AD中无匹配的设备
$csvOnly = $csvComputers | Where-Object { $_ -notin $adComputers } | ForEach-Object {
    [PSCustomObject]@{
        ComputerName = $_
        MismatchType = "仅存在于CSV(AD无匹配)"
    }
}

# AD中有但CSV中无匹配的设备
$adOnly = $adComputers | Where-Object { $_ -notin $csvComputers } | ForEach-Object {
    [PSCustomObject]@{
        ComputerName = $_
        MismatchType = "仅存在于AD(CSV无匹配)"
    }
}

# 4. 合并结果导出到CSV,替换为你的输出路径
$csvOnly + $adOnly | Export-Csv -Path "C:\Assets\mismatch_results.csv" -NoTypeInformation -Encoding UTF8

关键注意事项

  • 列名匹配:确认CSV中的计算机名列名,若不是ComputerName,需替换脚本中对应的字段。
  • 格式统一:如果你的CSV中计算机名本身带$后缀,删除$_.TrimEnd('$')这部分代码,直接使用AD原始名称。
  • 性能优化:若AD规模大,给Get-ADComputer加-SearchBase参数指定目标OU,减少查询范围:
    Get-ADComputer -Filter * -SearchBase "OU=Computers,DC=domain,DC=com"
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 06:10:34