Export-Clixml

创建一个或多个对象的基于 XML 的表示形式,并将其存储在文件中。

语法

Export-Clixml
      [-Path] <String>
      -InputObject <PSObject>
      [-Depth <Int32>]
      [-Force]
      [-NoClobber]
      [-Encoding <Encoding>]
      [-WhatIf]
      [-Confirm]
      [<CommonParameters>]
Export-Clixml
      -LiteralPath <String>
      -InputObject <PSObject>
      [-Depth <Int32>]
      [-Force]
      [-NoClobber]
      [-Encoding <Encoding>]
      [-WhatIf]
      [-Confirm]
      [<CommonParameters>]

说明

cmdlet Export-Clixml 创建一个公共语言基础结构 (CLI) 一个或多个对象的基于 XML 的表示形式,并将其存储在文件中。 然后, Import-Clixml 可以使用 cmdlet 根据该文件的内容重新创建保存的对象。 有关 CLI 的详细信息,请参阅 语言独立性

此 cmdlet 类似于 ConvertTo-Xml,只是将 Export-Clixml 生成的 XML 存储在文件中。 ConvertTo-XML 返回 XML,因此你可以继续在 PowerShell 中处理它。

在 Windows 计算机上, 的 Export-Clixml 一个有价值的用途是将凭据和安全字符串安全地导出为 XML。 有关示例,请参阅示例 3。

示例

示例 1:将字符串导出到 XML 文件

此示例创建一个 XML 文件,该文件存储在当前目录中,这是 一个测试字符串的表示形式。

"This is a test" | Export-Clixml -Path .\sample.xml

字符串 “这是一个测试 ”在管道中向下发送。 Export-Clixml 使用 Path 参数在当前目录中创建名为 sample.xml 的 XML 文件。

示例 2:将对象导出到 XML 文件

此示例演示如何将对象导出到 XML 文件,然后通过从该文件导入 XML 来创建对象。

Get-Acl C:\test.txt | Export-Clixml -Path .\FileACL.xml
$fileacl = Import-Clixml -Path .\FileACL.xml

cmdlet Get-Acl 获取文件的安全描述符 Test.txt 。 它将对象发送到管道,以将安全描述符传递给 Export-Clixml。 对象的基于 XML 的表示形式存储在名为 的 FileACL.xml文件中。

cmdlet Import-Clixml 根据 文件中的 XML FileACL.xml 创建对象。 然后,它将 对象保存在 变量中 $fileacl

示例 3:在 Windows 上加密导出的凭据对象

在此示例中,给定通过运行 Get-Credential cmdlet 存储在 变量中的$Credential凭据,可以运行 cmdlet Export-Clixml 将凭据保存到磁盘。

重要

Export-Clixml 仅导出 Windows 上的加密凭据。 在非 Windows 操作系统(如 macOS 和 Linux)上,凭据将导出为纯文本,并存储为 Unicode 字符数组。 这提供了一些模糊处理,但不提供加密。

$Credxmlpath = Join-Path (Split-Path $Profile) TestScript.ps1.credential
$Credential | Export-Clixml $Credxmlpath
$Credxmlpath = Join-Path (Split-Path $Profile) TestScript.ps1.credential
$Credential = Import-Clixml $Credxmlpath

cmdlet Export-Clixml 使用 Windows 数据保护 API 加密凭据对象。 加密可确保只有该计算机上的用户帐户才能解密凭据对象的内容。 导出 CLIXML 的文件不能用于其他计算机或其他用户。

在示例中,存储凭据的文件由 TestScript.ps1.credential表示。 将 TestScript 替换为要加载凭据的脚本的名称。

将凭据对象向下发送到 Export-Clixml管道, $Credxmlpath并将其保存到在第一个命令中指定的路径 。

若要将凭据自动导入脚本,请运行最后两个命令。 运行 Import-Clixml 以将安全凭据对象导入脚本。 此导入消除了在脚本中公开纯文本密码的风险。

示例 4:在 Linux 或 macOS 上导出凭据对象

在此示例中,我们使用 cmdlet 在 $Credential 变量Get-Credential中创建 PSCredentialExport-Clixml然后使用 将凭据保存到磁盘。

重要

Export-Clixml 仅导出 Windows 上的加密凭据。 在非 Windows 操作系统(如 macOS 和 Linux)上,凭据将导出为纯文本,并存储为 Unicode 字符数组。 这提供了一些模糊处理,但不提供加密。

PS> $Credential = Get-Credential

PowerShell credential request
Enter your credentials.
User: User1
Password for user User1: ********

PS> $Credential | Export-Clixml ./cred2.xml
PS> Get-Content ./cred2.xml

...
    <Props>
      <S N="UserName">User1</S>
      <SS N="Password">700061007300730077006f0072006400</SS>
    </Props>
...

PS> 'password' | Format-Hex -Encoding unicode

                 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
0000000000000000 70 00 61 00 73 00 73 00 77 00 6F 00 72 00 64 00 p a s s w o r d

此示例中的 输出 Get-Content 已被截断,以专注于 XML 文件中的凭据信息。 请注意,密码的纯文本值作为 Unicode 字符数组存储在 XML 文件中,由 Format-Hex验证。 因此,该值已编码,但未加密。

参数

-Confirm

提示你在运行 cmdlet 之前进行确认。

Type:SwitchParameter
Aliases:cf
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Depth

指定 XML 表示形式中所包含的包含对象的级别数。 默认值为 2

可以为文件中的对象类型 Types.ps1xml 重写默认值。 有关详细信息,请参阅 about_Types.ps1xml

Type:Int32
Position:Named
Default value:2
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Encoding

指定目标文件的编码类型。 默认值为 utf8NoBOM

此参数的可接受值如下所示:

  • ascii:使用 ASCII (7 位) 字符集的编码。
  • bigendianunicode:使用 big-endian 字节顺序以 UTF-16 格式进行编码。
  • oem:使用 MS-DOS 和控制台程序的默认编码。
  • unicode:使用 little-endian 字节顺序以 UTF-16 格式进行编码。
  • utf7:以 UTF-7 格式进行编码。
  • utf8:以 UTF-8 格式进行编码。
  • utf8BOM:使用字节顺序标记 (BOM) 以 UTF-8 格式进行编码
  • utf8NoBOM:以 UTF-8 格式编码,不带字节顺序标记 (BOM)
  • utf32:以 UTF-32 格式进行编码。

从 PowerShell 6.2 开始, Encoding 参数还允许使用已注册代码页的数字 ID (如 -Encoding 1251) 或已注册代码页的字符串名称 () -Encoding "windows-1251" 。 有关详细信息,请参阅 Encoding.CodePage 的 .NET 文档。

Type:Encoding
Accepted values:ASCII, BigEndianUnicode, OEM, Unicode, UTF7, UTF8, UTF8BOM, UTF8NoBOM, UTF32
Position:Named
Default value:UTF8NoBOM
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Force

强制运行命令而不要求用户确认。

使该 cmdlet 清除输出文件的只读属性(如有必要)。 该 cmdlet 将在命令完成时尝试重置只读属性。

Type:SwitchParameter
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-InputObject

指定要转换的对象。 输入一个包含对象的变量,或键入可获取对象的命令或表达式。 还可以通过管道将对象传递给 Export-Clixml

Type:PSObject
Position:Named
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:False

-LiteralPath

指定指向将存储对象的 XML 表示形式的文件的路径。 与 Path 不同, LiteralPath 参数的值与键入时完全相同。 不会将任何字符解释为通配符。 如果路径包括转义符,请将其括在单引号中。 单引号告知 PowerShell 不要将任何字符解释为转义序列。

Type:String
Aliases:PSPath, LP
Position:Named
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False

-NoClobber

指示 cmdlet 不会覆盖现有文件的内容。 默认情况下,如果文件存在于指定路径中, Export-Clixml 则覆盖该文件而不发出警告。

Type:SwitchParameter
Aliases:NoOverwrite
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Path

指定指向将存储对象的 XML 表示形式的文件的路径。

Type:String
Position:0
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False

-WhatIf

显示运行该 cmdlet 时会发生什么情况。 cmdlet 未运行。

Type:SwitchParameter
Aliases:wi
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

输入

PSObject

可以将任何对象管道传递给 Export-Clixml

输出

FileInfo

Export-Clixml 创建一个包含 XML 的文件。