PowerShell脚本优化:为所有重复邮箱条目添加location_id
解决PowerShell生成重复邮箱时所有条目追加location_id的问题
核心思路是先全局统计所有邮箱的重复次数,再遍历每一条数据,只要对应邮箱存在重复,就给该条目追加location_id,而非仅处理后续重复项。
修改后的脚本示例
# 替换为你的CSV文件路径 $csvPath = "input.csv" $outputPath = "output.csv" # 读取原始CSV数据 $userData = Import-Csv -Path $csvPath # 按生成的邮箱地址分组,统计每个邮箱的出现次数 $emailGroups = $userData | Group-Object -Property Email # 遍历每一条用户数据,处理重复邮箱 foreach ($user in $userData) { $targetGroup = $emailGroups | Where-Object { $_.Name -eq $user.Email } # 只要该邮箱出现次数大于1,就为当前条目追加location_id if ($targetGroup.Count -gt 1) { # 拆分邮箱的本地前缀和域名,拼接location_id $localPart, $domainPart = $user.Email -split "@", 2 $user.Email = "$localPart+$($user.location_id)@$domainPart" } } # 将处理后的数据导出到新CSV $userData | Export-Csv -Path $outputPath -NoTypeInformation
关键说明
- 使用
Group-Object提前统计所有邮箱的重复情况,确保能识别出所有需要处理的重复条目,包括第一个出现的重复项 - 拆分邮箱时用
-split "@", 2避免邮箱本地部分包含@的异常情况(虽然少见,但更健壮) - 这里用
+作为分隔符(符合多数邮箱服务商的别名规则),如果需要其他格式,直接修改拼接逻辑即可,比如改成$localPart.$($user.location_id)@$domainPart
内容的提问来源于stack exchange,提问作者Narek Arakelyan
相关产品推荐
相关产品推荐

