ZetCode

PowerShell Import-Clixml

最后修改:2025 年 2 月 15 日

在本文中,我们将介绍 PowerShell 中的 Import-Clixml cmdlet。此 cmdlet 从使用 Export-Clixml 创建的 CLIXML 文件导入对象。

CLIXML 基础知识

CLIXML 是 PowerShell 的对象序列化格式。它在保存到文件时保留对象的结构和属性。Import-Clixml 从这些文件中重构对象。这对于数据持久化和会话间传输非常有用。

Import-Clixml 的基本用法

使用 Import-Clixml 最简单的方法是提供文件路径。它会读取 CLIXML 文件并重新创建原始对象。这些对象将保留其属性和方法。此示例展示了基本的文件导入。

import1.ps1
$data = Import-Clixml -Path "C:\data\processes.clixml"
$data

此命令将对象从 processes.clixml 导入到 $data 中。然后可以将这些对象像任何其他 PowerShell 对象一样使用。该文件必须存在。

导入进程对象

您可以使用 CLIXML 保存和还原进程信息。首先使用 Export-Clixml 导出进程,然后稍后导入它们。这会保留导出时进程对象的状态。对分析很有用。

import2.ps1
Get-Process | Export-Clixml -Path "C:\temp\processes.clixml"
$savedProcesses = Import-Clixml -Path "C:\temp\processes.clixml"
$savedProcesses | Select-Object Name, Id, CPU -First 5

此命令将当前进程导出到文件,然后导入它们。Select-Object cmdlet 显示前 5 个进程的名称、ID 和 CPU。请注意,实时进程数据可能与保存的状态不同。

导入自定义对象

Import-Clixml 也适用于自定义对象。创建自定义对象,导出它,然后在另一个会话中导入它。所有属性都将保留。这使得复杂的持久化场景成为可能。

import3.ps1
$customObj = [PSCustomObject]@{
    Name = "Server01"
    Status = "Online"
    Uptime = (Get-Date).AddDays(-1)
}
$customObj | Export-Clixml -Path "C:\temp\server.clixml"
$importedObj = Import-Clixml -Path "C:\temp\server.clixml"
$importedObj

此命令创建并导出一个自定义服务器对象,然后将其导入。导入的对象具有所有原始属性。DateTime 对象会被正确重构。

导入安全字符串

Import-Clixml 可以安全地导入加密字符串。与 Export-Clixml 一起使用时,它会保持加密。这对于安全存储凭据非常有用。加密使用 Windows 数据保护 API。

import4.ps1
$secureString = Read-Host "Enter password" -AsSecureString
$secureString | Export-Clixml -Path "C:\temp\password.clixml"
$importedSecureString = Import-Clixml -Path "C:\temp\password.clixml"
$credential = New-Object System.Management.Automation.PSCredential("user", $importedSecureString)

此命令安全地保存密码,然后重新创建一个凭据对象。密码在磁盘和内存中保持加密状态。只有同一台机器上的同一用户才能解密它。

从管道导入

Import-Clixml 可以接受来自管道的输入。这允许与其他 cmdlet 链接。Path 参数按属性名称接受管道输入。适用于动态文件处理。

import5.ps1
Get-ChildItem "C:\data\*.clixml" | Import-Clixml

此命令导入 C:\data 中的所有 CLIXML 文件。每个文件的内容都会输出到管道。请注意,所有文件都必须包含有效的 CLIXML 数据。

错误处理

导入 CLIXML 文件时,可能会发生错误。常见问题包括无效路径或数据损坏。使用 try/catch 块可优雅地处理错误。此示例展示了健壮的导入处理。

import6.ps1
try {
    $data = Import-Clixml -Path "C:\data\missing.clixml" -ErrorAction Stop
    $data
}
catch {
    Write-Warning "Failed to import CLIXML: $_"
}

此命令尝试导入一个可能不存在的文件。-ErrorAction Stop 确保捕获异常。catch 块处理任何导入错误。

导入复杂对象

Import-Clixml 可以处理复杂的对象层次结构。这包括数组、哈希表和嵌套对象。整个对象图都将被保留。此示例演示了嵌套对象导入。

import7.ps1
$complexObject = @{
    Servers = @(
        [PSCustomObject]@{Name="Web01"; Role="Frontend"},
        [PSCustomObject]@{Name="DB01"; Role="Backend"}
    )
    Timestamp = Get-Date
}
$complexObject | Export-Clixml -Path "C:\temp\servers.clixml"
$imported = Import-Clixml -Path "C:\temp\servers.clixml"
$imported.Servers | Format-Table

此命令创建并导出一个包含嵌套数组的复杂对象。导入会重新创建完整的结构。Format-Table cmdlet 显示服务器。

来源

PowerShell 文档

在本文中,我们已经介绍了 PowerShell 中的 Import-Clixml cmdlet。

作者

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

列出 所有 PowerShell 教程