Export-Clixml

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

语法

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

说明

该 cmdlet 将 Export-Clixml 对象序列化为基于 XML 的公共语言基础结构(CLI)表示形式,将其存储在文件中。 然后可以使用 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”的一种表示形式。

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

字符串 This is a test 通过管道发送。 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

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

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

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

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

重要

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

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

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

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

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

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

在此示例中,我们使用 Get-Credential cmdlet 在 $Credential 变量中创建 PSCredential。 然后使用 Export-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

   Label: String (System.String) <52D60C91>

          Offset Bytes                                           Ascii
                 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 之前进行确认。

类型:SwitchParameter
别名:cf
Position:Named
默认值:False
必需:False
接受管道输入:False
接受通配符:False

-Depth

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

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

类型:Int32
Position:Named
默认值:2
必需:False
接受管道输入:False
接受通配符:False

-Encoding

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

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

  • ascii:对 ASCII(7 位)字符集使用编码。
  • ansi:对当前区域性的 ANSI 代码页使用编码。 此选项已在 7.4 中添加。
  • bigendianunicode:使用 big-endian 字节顺序以 UTF-16 格式进行编码。
  • bigendianutf32:使用 big-endian 字节顺序以 UTF-32 格式进行编码。
  • oem:对 MS-DOS 和控制台程序使用默认编码。
  • unicode:使用 little-endian 字节顺序以 UTF-16 格式进行编码。
  • utf7:采用 UTF-7 格式编码。
  • utf8:采用 UTF-8 格式编码。
  • utf8BOM:使用字节顺序标记 (BOM) 以 UTF-8 格式进行编码
  • utf8NoBOM:不使用字节顺序标记 (BOM) 以 UTF-8 格式进行编码
  • utf32:采用 UTF-32 格式编码。

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

从 PowerShell 7.4 开始,可以使用 Encoding 参数的 Ansi 值来传递当前区域性 ANSI 代码页的数字 ID,而无需手动指定它。

注意

UTF-7* 不再推荐使用。 从 PowerShell 7.1 起,如果为 Encoding 参数指定 utf7,则会编写警告。

类型:Encoding
接受的值:ASCII, BigEndianUnicode, BigEndianUTF32, OEM, Unicode, UTF7, UTF8, UTF8BOM, UTF8NoBOM, UTF32
Position:Named
默认值:UTF8NoBOM
必需:False
接受管道输入:False
接受通配符:False

-Force

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

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

类型:SwitchParameter
Position:Named
默认值:False
必需:False
接受管道输入:False
接受通配符:False

-InputObject

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

类型:PSObject
Position:Named
默认值:None
必需:True
接受管道输入:True
接受通配符:False

-LiteralPath

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

类型:String
别名:PSPath, LP
Position:Named
默认值:None
必需:True
接受管道输入:False
接受通配符:False

-NoClobber

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

类型:SwitchParameter
别名:NoOverwrite
Position:Named
默认值:False
必需:False
接受管道输入:False
接受通配符:False

-Path

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

类型:String
Position:0
默认值:None
必需:True
接受管道输入:False
接受通配符:False

-WhatIf

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

类型:SwitchParameter
别名:wi
Position:Named
默认值:False
必需:False
接受管道输入:False
接受通配符:False

输入

PSObject

你可以通过管道将任何对象传递给此 cmdlet。

输出

FileInfo

此 cmdlet 返回一个 FileInfo 对象,该对象表示使用存储的数据创建的文件。