PowerShell中Export-Clixml不能导出标准XML,仅支持PowerShell专用序列化格式;如需跨语言交互,须先转PSCustomObject再用ConvertTo-Xml。

PowerShell 中不能直接用 Export-Clixml 导出纯哈希表(System.Collections.Hashtable)为“标准 XML 文件”,因为该 cmdlet 实际上序列化的是对象的完整 .NET 对象图(含类型信息、私有字段等),生成的是 PowerShell 专用的二进制兼容 XML 格式,不是通用可读的结构化 XML(如 `
导出为 PowerShell 原生序列化 XML(推荐用于 PowerShell 环境间交换)
这是最简单、最可靠的方式,适用于后续仍用 PowerShell 读取的场景:
- 使用
Export-Clixml直接导出哈希表,它会保留所有键值对、嵌套结构和数据类型(如数字、布尔、数组) - 导出后可用
Import-Clixml完整还原为原始哈希表,包括嵌套哈希表或数组 - 示例:
$hash = @{Name='Alice'; Age=30; IsActive=$true; Tags=@('Admin','Dev')}$hash | Export-Clixml -Path "config.xml"$restored = Import-Clixml -Path "config.xml"
导出为通用可读的结构化 XML(如用于配置、跨语言交互)
PowerShell 没有内置 cmdlet 直接将哈希表“美化”成语义清晰的 XML,需手动构造。常用方法是先转为自定义对象(PSCustomObject),再用 ConvertTo-Xml:
-
ConvertTo-Xml默认只接受对象(不支持直接传哈希表),所以需先包装:$hash = @{Server='web01'; Port=443; SSL=$true}[PSCustomObject]$hash | ConvertTo-Xml -NoTypeInformation | Select-Object -ExpandProperty OuterXml - 输出类似:
- 若需更简洁格式(如根节点叫
Config),可进一步用[xml]类型强制转换 + 手动重组节点,或借助System.Xml.XmlDocument构建
注意:哈希表键名的限制
无论哪种方式,哈希表的键名都会影响 XML 输出质量:
- 键名不能含空格、点号、连字符等特殊字符(否则
ConvertTo-Xml可能报错或生成非法 XML 属性名) - 建议统一用 PascalCase 或 camelCase 键名,例如
UserName而非User Name或user-name - 若必须保留特殊字符键,先重命名再导出,或改用 JSON(
ConvertTo-Json)作为替代方案
小结:选哪种?
如果目标是 PowerShell 内部持久化或传输——用 Export-Clixml;
如果目标是人可读、被其他系统(如 C#、Python)解析——先转 PSCustomObject,再用 ConvertTo-Xml,必要时配合 XML DOM 手动优化结构。










