Share via


Export-Clixml

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

Syntax

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

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

字串 這是在 管線下傳送的測試。 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

                 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格式編碼。
  • 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 檔。

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 的檔案。