PowerShell 技能连载 - 数据迁移与转换技巧
适用于 PowerShell 5.1 及以上版本
在 IT 运维和开发工作中,数据迁移和格式转换是高频需求。系统升级时需要将用户数据从旧格式迁移到新格式,报表汇总时需要合并多个 CSV 文件并转换字段,跨系统对接时需要在 JSON、CSV、XML、YAML 之间来回转换。这些任务看似简单,但涉及编码问题、类型映射、空值处理、增量同步等细节时往往让人头疼。
PowerShell 内置了 ConvertTo-Csv、ConvertFrom-Json、ConvertTo-Xml 等丰富的转换 cmdlet,配合管道操作可以快速构建 ETL(Extract-Transform-Load)流程。本文将从实际场景出发,讲解数据迁移和转换中的常用技巧。
CSV 数据读取与清洗
1 | # 场景:从遗留系统导出的 CSV 数据质量差,需要清洗后再导入新系统 |
执行结果示例:
1 | EmployeeID Name Department Salary HireDate Status Cleaned |
CSV 转 JSON 与嵌套结构
1 | # 场景:将扁平的 CSV 数据转换为嵌套的 JSON 结构供 API 消费 |
执行结果示例:
1 | { |
JSON 转 CSV 与字段展开
1 | # 场景:从 API 获取的嵌套 JSON 需要展开为扁平的 CSV 供报表使用 |
执行结果示例:
1 | 已导出到 C:\Users\admin\AppData\Local\Temp\users_flat.csv |
增量数据迁移与变更追踪
1 | # 场景:定期从源系统迁移数据到目标系统,只迁移新增或变更的记录 |
执行结果示例:
1 | 迁移完成: |
多文件合并与格式批量转换
1 | # 场景:批量合并多个 CSV 文件,统一格式后输出为 JSON |
执行结果示例:
1 | 找到 3 个文件待合并 |
注意事项
- 编码一致性:读写文件时始终显式指定
-Encoding UTF8,避免中文乱码,尤其在不同 Windows 版本间迁移时 - 大文件性能:超过 10 万行的 CSV 不要用
Import-Csv一次性加载到内存,应逐行流式处理或使用StreamReader - 日期格式标准化:迁移前统一日期格式(推荐 ISO 8601),避免
2025/08/06与2025-08-06混用导致比较失败 - 空值策略:明确区分空字符串、
$null和缺失值,迁移前定义好每种情况的处理规则(跳过、默认值、报错) - 事务性保证:关键数据迁移应在导入前备份目标数据,失败时能回滚到迁移前的状态
- 字段映射验证:源和目标的字段名、类型、长度可能不同,迁移前应做字段映射表并逐条校验
PowerShell 技能连载 - 数据迁移与转换技巧
http://blog.vichamp.com/2025/08/06/powershell-data-migration/