如何用Windows PowerShell在TSV文件中替换Manager字段为匹配的Primary Email
PowerShell替换TSV中Manager字段为对应邮箱的解决方案
假设你的TSV文件包含员工ID、Manager(存储员工ID)、Primary Email等表头字段,以下是两种常见场景的解决脚本:
场景1:所有数据在同一个TSV文件中
脚本逻辑:先把文件内容读入内存,构建ID到Primary Email的映射表,再遍历每条记录替换Manager字段。
# 替换为你的实际文件路径 $inputFile = "C:\data\employees.tsv" $outputFile = "C:\data\employees_updated.tsv" # 读取带表头的TSV文件 $empList = Import-Csv -Path $inputFile -Delimiter "`t" # 构建ID与邮箱的映射哈希表(提高查询效率) $emailLookup = @{} foreach ($emp in $empList) { $emailLookup[$emp.ID] = $emp.'Primary Email' } # 遍历替换Manager字段 foreach ($emp in $empList) { # 找到匹配的邮箱就替换,找不到则保留原Manager值 if ($emailLookup.ContainsKey($emp.Manager)) { $emp.Manager = $emailLookup[$emp.Manager] } # 可选:如果想把无匹配的Manager设为空,替换成下面这行 # $emp.Manager = $emailLookup[$emp.Manager] ?? "" } # 导出处理后的TSV(-NoTypeInformation避免生成多余类型头) $empList | Export-Csv -Path $outputFile -Delimiter "`t" -NoTypeInformation -Encoding UTF8
场景2:Manager与邮箱的映射在单独的TSV文件中
如果员工主数据和ID-邮箱映射表是两个分开的文件,用以下脚本:
$mainDataFile = "C:\data\main_employees.tsv" $managerMapFile = "C:\data\manager_email_map.tsv" $outputFile = "C:\data\main_employees_updated.tsv" # 先读取映射表构建哈希表 $emailLookup = @{} Import-Csv -Path $managerMapFile -Delimiter "`t" | ForEach-Object { $emailLookup[$_.ID] = $_.PrimaryEmail } # 处理主数据文件 $mainData = Import-Csv -Path $mainDataFile -Delimiter "`t" foreach ($item in $mainData) { if ($emailLookup.ContainsKey($item.Manager)) { $item.Manager = $emailLookup[$item.Manager] } } # 导出结果 $mainData | Export-Csv -Path $outputFile -Delimiter "`t" -NoTypeInformation -Encoding UTF8
注意事项
- 确保脚本中的列名(如
ID、Manager、Primary Email)与你的TSV表头完全一致,大小写敏感。 - 导出时指定
-Encoding UTF8避免中文乱码问题。 - 不要直接覆盖原文件,建议输出到新文件验证无误后再替换。
内容的提问来源于stack exchange,提问作者Pankaj Karmakar
相关产品推荐
相关产品推荐

