PowerShell 技能连载 - 选择最佳的文件格式(第 3 部分)
PowerShell 支持多种文本文件格式,那么保存和读取数据的最佳方法是什么呢?
在本系列的前两部分中,我们提供了一个实用的指南,帮助您根据数据的性质选择最佳文件格式(和适当的 cmdlet)。
当您决定使用 XML 作为数据格式时,您会发现内置的 Export/Import-CliXml
cmdlet 是将 您自己的对象 保存到 XML 文件和反向操作的简单方法。但是如果您需要处理来自您自己未创建的源的 XML 数据,该怎么办呢?让我们来看一下名为“Xml”的 cmdlet:ConvertTo-Xml
。它可以将任何对象转换为 XML 格式:
1 | PS> Get-Process -Id $pid | ConvertTo-Xml |
结果是XML,只有在将其存储在变量中时才有意义,这样您可以检查XML对象并输出XML字符串表示:
1 | PS> $xml = Get-Process -Id $pid | ConvertTo-Xml |
虽然没有 Export-Xml
的命令,但你可以轻松地创建自己的 Export-CliXml
,将对象持久化到文件中,而无需使用专有的“CliXml”结构。
1 | # data to be persisted in XML: |
要走相反的路线,将XML转换回对象,没有 ConvertFrom-Xml`` - 因为这个功能已经内置在类型
[Xml]` 中。要将上面的示例文件转换回对象,您可以执行以下操作(假设您使用上面的示例代码创建了result.xml文件):
1 | # path to XML file: |
这段代码可以读取(任何)XML文件并将XML转换为对象。你可以使用这个模板来读取和处理几乎任何XML文件。
话虽如此,要使用这些数据,你需要了解它的内部结构。在我们的示例中,我们”序列化”了10个进程对象。结果发现,Convert-Xml
通过描述所有属性来保存这些对象。上面的代码演示了如何首先获取序列化对象(在 .Objects.Object` 中找到),然后如何读取属性信息(在
.Property` 中作为对象数组,每个属性一个对象)。