ZetCode

PowerShell Export-Clixml

最后修改:2025 年 2 月 15 日

本文介绍PowerShell中的Export-Clixml cmdlet。它将对象序列化为XML文件以进行存储或传输。该cmdlet保留对象结构和属性。它对于在会话之间保存复杂数据非常有用。

CLIXML基础知识

CLIXML是PowerShell自定义的基于XML的序列化格式。它保留对象结构和类型信息。Export-Clixml创建的文件可以使用Import-Clixml导入。该格式针对PowerShell对象进行了优化。它不用于跨平台使用。

Export-Clixml基本用法

最简单的用法是将单个对象导出到XML文件。指定输入对象和输出文件路径。该cmdlet会自动创建XML表示。文件之后可以导入以重新创建对象。

export1.ps1
Get-Process -Name "notepad" | Export-Clixml -Path "notepad_process.xml"

这会将记事本进程信息导出到XML文件。输出包含所有进程属性。文件可以导入以重新创建Process对象。

导出多个对象

Export-Clixml可以处理对象集合。整个集合被序列化到一个文件中。导入时,原始集合结构得以保留。这适用于数组和其他集合。

export2.ps1
Get-Process | Where-Object { $_.CPU -gt 10 } | Export-Clixml -Path "busy_processes.xml"

这会导出所有CPU占用超过10秒的进程。生成的文件包含一个Process对象数组。每个对象都保留其属性和方法。

导出自定义对象

您可以导出任何PowerShell对象,包括自定义对象。此示例创建并导出了一个自定义对象。XML保留所有属性值。对象类型信息也已存储。

export3.ps1
$user = [PSCustomObject]@{
    Name = "John Doe"
    Age = 35
    Department = "IT"
}
$user | Export-Clixml -Path "user_profile.xml"

这会创建一个自定义用户对象并导出它。XML文件包含所有属性及其值。导入时会保留对象类型。

导出安全字符串

Export-Clixml可以安全地导出敏感数据,如密码。它使用Windows数据保护API进行加密。只有同一台机器上的同一用户才能解密。这比纯文本存储更安全。

export4.ps1
$secureString = Read-Host -AsSecureString -Prompt "Enter password"
$secureString | Export-Clixml -Path "password.xml"

这会安全地存储密码提示响应。数据使用当前用户的凭据进行加密。只能由同一用户解密。

与Export-Csv比较

Export-Csv不同,Export-Clixml保留对象类型和结构。CSV是纯文本,会丢失类型信息。CLIXML更适合复杂对象和后续重构。CSV更适合可移植性。

export5.ps1
Get-Service | Select-Object -First 5 | Export-Clixml -Path "services.xml"
Get-Service | Select-Object -First 5 | Export-Csv -Path "services.csv"

这并排显示了两种导出方法。XML文件保留了ServiceController对象。CSV仅包含文本格式的属性值。

用于嵌套对象的Depth参数

-Depth参数控制要序列化的嵌套对象的级别数。默认为2,这可能会截断复杂对象。对于深度嵌套的结构,请增加此值。较高的值会增加文件大小。

export6.ps1
$complexObject = Get-Process -Name "powershell" | Select-Object -Property *
$complexObject | Export-Clixml -Path "deep_process.xml" -Depth 5

这会导出具有所有属性的PowerShell进程。增加的深度确保嵌套对象被完全序列化。文件会更大,但更完整。

导出以供跨会话使用

CLIXML文件主要用于PowerShell到PowerShell的传输。它们可用于在会话之间保存状态。文件对于某些对象类型是机器特定的。它们不适合跨平台共享。

export7.ps1
$sessionData = @{
    Time = Get-Date
    User = $env:USERNAME
    Processes = Get-Process
}
$sessionData | Export-Clixml -Path "session_state.xml"

这会将各种会话信息导出到一个文件中。数据可以在另一个会话中导入。某些对象在不同机器上可能无法正常工作。

来源

PowerShell 文档

本文介绍了PowerShell中的Export-Clixml cmdlet。我们探讨了基本和高级用法场景。该cmdlet在对象序列化方面非常强大。它对于PowerShell特定的数据存储特别有用。

作者

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

列出 所有 PowerShell 教程