ZetCode

PowerShell ConvertTo-Xml

最后修改:2025 年 2 月 15 日

本文介绍PowerShell中的ConvertTo-Xml cmdlet。它将.NET对象转换为XML表示形式。该cmdlet对于数据序列化和配置管理非常有用。

XML基础知识

XML(eXtensible Markup Language)是一种结构化数据格式。它使用标签定义元素和属性。PowerShell可以通过各种cmdlet处理XML。ConvertTo-Xml将对象序列化为XML格式。

ConvertTo-Xml基本用法

使用ConvertTo-Xml最简单的方法是处理单个对象。该cmdlet返回一个XML文档对象。默认情况下,它会在输出中包含类型信息。XML可以进一步处理或保存到文件。

xml1.ps1
$date = Get-Date
$date | ConvertTo-Xml

这会将DateTime对象转换为XML。输出将对象的属性显示为XML元素。默认情况下包含类型信息。

将进程信息转换为XML

您可以将进程对象转换为XML以进行分析或存储。此示例获取记事本进程并对其进行转换。XML结构保留了对象层次结构。这对于日志记录或配置管理很有用。

xml2.ps1
Get-Process -Name "notepad" | ConvertTo-Xml

此命令检索记事本进程并将其转换为XML。每个进程属性都成为一个XML元素。输出可以管道传输到其他cmdlet。

PS C:\> .\xml2.ps1

Objects

Object
-------
<Objs Version="1.1.0.1" xmlns="http://schemas.microsoft.com/powershell/2004/04">
  <Obj RefId="0">
    <TN RefId="0">
      <T>System.Diagnostics.Process</T>
      <T>System.ComponentModel.Component</T>
      <T>System.MarshalByRefObject</T>
      <T>System.Object</T>
    </TN>
    <ToString>System.Diagnostics.Process (notepad)</ToString>
    <Props>
      <I32 N="Id">1234</I32>
      <S N="Name">notepad</S>
      ...
    </Props>
  </Obj>
</Objs>

将XML保存到文件

XML输出可以直接保存到文件。为此目的使用重定向或Out-File。这会创建对象的持久XML表示。文件可以稍后使用Import-Clixml加载。

xml3.ps1
Get-Service | ConvertTo-Xml | Out-File "services.xml"

此命令将所有服务信息保存到XML文件中。该文件可以共享或存档。XML格式保留了对象结构。

将自定义对象转换为XML

可以使用New-ObjectPSCustomObject创建的自定义对象可以被转换。这对于创建配置文件很有用。XML结构将反映对象的属性。您可以控制转换的深度。

xml4.ps1
$user = [PSCustomObject]@{
    Name = "John Doe"
    Age = 42
    Active = $true
}
$user | ConvertTo-Xml

这会创建一个自定义用户对象并将其转换为XML。每个属性都成为一个XML元素。输出包含对象的类型信息。

排除类型信息

可以使用-NoTypeInformation参数排除类型信息。这会创建更干净的XML输出。生成的XML更紧凑。当不需要类型详细信息时,这很有用。

xml5.ps1
Get-Process -Name "powershell" | 
    ConvertTo-Xml -NoTypeInformation

这会将PowerShell进程转换为XML,不包含类型信息。输出更简单,更侧重于数据。它更适合互操作性。

控制XML深度

-Depth参数控制要转换的嵌套对象的级别数。默认值为2。对于复杂对象,请增加此值。对于非常深的结构,请小心,以免出现性能问题。

xml6.ps1
$complexObject = @{
    Level1 = @{
        Level2 = @{
            Level3 = "Value"
        }
    }
}
$complexObject | ConvertTo-Xml -Depth 5

这会将深度嵌套的哈希表转换为XML。-Depth参数确保包含所有级别。如果没有它,一些嵌套数据可能会被截断。

转换为XML字符串

要将XML作为字符串而不是XML文档对象获取,请使用-As String参数。当您需要原始XML文本时,这很有用。字符串可以被操作或发送到Web服务。

xml7.ps1
$services = Get-Service | Select-Object -First 3
$services | ConvertTo-Xml -As String

这会将前三个服务转换为XML字符串。输出是原始XML文本而不是对象。此格式更适合某些API。

来源

PowerShell 文档

在本文中,我们介绍了PowerShell中的ConvertTo-Xml cmdlet。

作者

我叫Jan Bodnar,是一位充满激情的程序员,拥有丰富的编程经验。自2007年以来,我一直在撰写编程文章。迄今为止,我已撰写了1400多篇文章和8本电子书。我在编程教学方面拥有十多年的经验。

列出 所有 PowerShell 教程