共用方式為


Export-Clixml

建立一或多個物件的 XML 表示法,並將它儲存在檔案中。

Syntax

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>]

Description

Cmdlet 會將 Export-Clixml 物件串行化為 Common Language Infrastructure (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

字串 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

Cmdlet Get-Acl 會取得檔案的安全性描述元 Test.txt 。 它會將物件向下傳送至管線,以將安全性描述項傳遞至 Export-Clixml。 物件的 XML 型表示法會儲存在名為 FileACL.xml的檔案中。

Cmdlet Import-Clixml 會從檔案中的 FileACL.xml XML 建立 物件。 然後,它會將物件儲存在變數中 $fileacl

範例 3:加密 Windows 上導出的認證物件

在此範例中,假設您已藉由執行 Get-Credential Cmdlet 將認證儲存在變數中$Credential,您可以執行 Export-Clixml Cmdlet 將認證儲存至磁碟。

重要

Export-Clixml 只會在 Windows 上匯出加密的認證。 在macOS和Linux等非 Windows 作業系統上,認證會匯出為儲存為 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 上的認證物件

在此範例中,我們會使用 Get-Credential Cmdlet 在 $Credential 變數中建立 PSCredential。 然後,我們會使用 Export-Clixml 將認證儲存至磁碟。

重要

Export-Clixml 只會在 Windows 上匯出加密的認證。 在macOS和Linux等非 Windows 作業系統上,認證會匯出為儲存為 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 前提示您確認。

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:使用大位元組位元組順序以UTF-16格式編碼。
  • bigendianutf32:使用大位元組位元組順序以UTF-32格式編碼。
  • oem:使用 MS-DOS 和控制台程式的預設編碼方式。
  • unicode:使用位元組由小到大的順序,以UTF-16格式編碼。
  • utf7:以 UTF-7 格式編碼。
  • utf8:以 UTF-8 格式編碼。
  • utf8BOM:使用位元組順序標記 (BOM) 以 UTF-8 格式編碼
  • utf8NoBOM:以 UTF-8 格式編碼,不含位元組順序標記 (BOM)
  • utf32:以 UTF-32 格式編碼。

從 PowerShell 6.2 開始, Encoding 參數也允許已註冊代碼頁的數值標識符, (例如 -Encoding 1251) 或已註冊代碼頁的字串名稱 (,例如 -Encoding "windows-1251") 。 如需詳細資訊,請參閱 Encoding.CodePage 的 .NET 檔。

注意

不再建議使用UTF-7* 。 自 PowerShell 7.1 起,如果您為 Encoding 參數指定utf7,則會寫入警告。

Type:Encoding
Accepted values:ASCII, BigEndianUnicode, BigEndianUTF32, 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

您可以將任何物件管線傳送至此 Cmdlet。

輸出

FileInfo

此 Cmdlet 會傳回 FileInfo 物件,代表具有預存數據的已建立檔案。