Export-Clixml

建立基於 XML 的物件表示,並將其儲存在檔案中。

語法

ByPath (預設值)

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

ByLiteralPath

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

Description

Export-Clixml cmdlet 將物件序列化為基於 XML 的通用語言基礎架構(CLI)表示法,並儲存在檔案中。 接著你可以用 Import-Clixml cmdlet 根據該檔案的內容重新建立已儲存的物件。 如需有關 CLI 的更多資訊,請參閱 語言獨立性。

此 cmdlet 類似 ConvertTo-Xml於 ,但會 Export-Clixml 將產生的 XML 儲存在檔案中。 ConvertTo-Xml 回傳 XML,讓你可以繼續在 PowerShell 中處理。

Export-Clixml 在Windows電腦上的一個重要用途是將憑證與字串安全匯出為 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

指令小程式取得 Get-Acl 檔案的安全 Test.txt 描述符。 它會將物件送入管線,將安全描述符傳給 Export-Clixml。 基於 XML 的物件表示會儲存在一個名為 FileACL.xml的檔案中。

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

範例 3:在 Windows 上加密匯出的憑證物件

在此範例中,假設您已藉由執行 $Credential Cmdlet,將認證儲存在 Get-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 上匯出憑證物件

在這個例子中,我們使用 cmdlet 在變數中$Credential建立一個 Get-Credential。 接著我們會把 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
預設值:False
支援萬用字元:False
不要顯示:False
別名:參見

參數集

(All)
Position:Named
必要:False
來自管線的值:False
來自管線按屬性名稱的值:False
來自剩餘引數的值:False

-Depth

指定包含多少層級的物件包含在 XML 表示中。 預設值為 2。

預設值可以被檔案中的 Types.ps1xml 物件類型覆寫。 如需詳細資訊,請參閱 about_Types.ps1xml。

參數屬性

類型:Int32
預設值:2
支援萬用字元:False
不要顯示:False

參數集

(All)
Position:Named
必要:False
來自管線的值:False
來自管線按屬性名稱的值:False
來自剩餘引數的值:False

-Encoding

指定目標檔案的編碼類型。 預設值為 utf8NoBOM。

此參數可接受的值如下:

  • ascii:使用 ASCII (7 位) 字元集的編碼方式。
  • ansi:使用符合當前文化特性的 ANSI 代碼頁的編碼方式。 這個選項是在 7.4 版本中加入的。
  • bigendianunicode:使用高位元組序以 UTF-16 格式編碼。
  • bigendianutf32:使用大端字節順序以 UTF-32 格式進行編碼。
  • oem:使用 MS-DOS 和控制台程序的預設編碼方式。
  • unicode:使用小端位元組順序,以UTF-16格式進行編碼。
  • utf7:以UTF-7格式編碼。
  • utf8:以UTF-8格式編碼。
  • utf8BOM:以 UTF-8 格式(含位元組順序標記 BOM)編碼
  • utf8NoBOM:以 UTF-8 格式編碼,不含位元組順序標記【BOM】
  • utf32:以UTF-32格式編碼。

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

從 PowerShell 7.4 開始,您可以使用 Ansi 參數的 值,傳遞目前文化的 ANSI 代碼頁的數值 ID,而不需要手動指定。

Note

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

參數屬性

類型:Encoding
預設值:UTF8NoBOM
接受的值:ASCII, BigEndianUnicode, BigEndianUTF32, OEM, Unicode, UTF7, UTF8, UTF8BOM, UTF8NoBOM, UTF32
支援萬用字元:False
不要顯示:False

參數集

(All)
Position:Named
必要:False
來自管線的值:False
來自管線按屬性名稱的值:False
來自剩餘引數的值:False

-Force

強制命令執行,而不要求使用者確認。

必要時會讓指令檔清除輸出檔案的唯讀屬性。 指令完成後,cmdlet 會嘗試重置唯讀屬性。

參數屬性

類型:SwitchParameter
預設值:False
支援萬用字元:False
不要顯示:False

參數集

(All)
Position:Named
必要:False
來自管線的值:False
來自管線按屬性名稱的值:False
來自剩餘引數的值:False

-InputObject

指定要轉換的物件。 輸入包含 物件的變數,或輸入取得物件的命令或表達式。 您也可以使用管線將物件傳送至 Export-Clixml。

參數屬性

類型:PSObject
預設值:None
支援萬用字元:False
不要顯示:False

參數集

(All)
Position:Named
必要:True
來自管線的值:True
來自管線按屬性名稱的值:False
來自剩餘引數的值:False

-LiteralPath

指定物件 XML 表示將儲存在檔案的路徑。 與 Path不同,LiteralPath 參數的值會被按照輸入時的格式原樣使用。 不會將任何字元解譯為通配符。 如果路徑包含逸出字元,請以單引弧括住它。 單引號會告知PowerShell不要將任何字元解譯為逸出序列。

參數屬性

類型:String
預設值:None
支援萬用字元:False
不要顯示:False
別名:PSPath, LP

參數集

ByLiteralPath
Position:Named
必要:True
來自管線的值:False
來自管線按屬性名稱的值:False
來自剩餘引數的值:False

-NoClobber

表示該指令檔不會覆蓋現有檔案的內容。 預設情況下,如果指定路徑中有檔案,會 Export-Clixml 無預警覆寫該檔案。

參數屬性

類型:SwitchParameter
預設值:False
支援萬用字元:False
不要顯示:False
別名:NoOverwrite

參數集

(All)
Position:Named
必要:False
來自管線的值:False
來自管線按屬性名稱的值:False
來自剩餘引數的值:False

-Path

指定物件 XML 表示將儲存在檔案的路徑。

參數屬性

類型:String
預設值:None
支援萬用字元:False
不要顯示:False

參數集

ByPath
Position:0
必要:True
來自管線的值:False
來自管線按屬性名稱的值:False
來自剩餘引數的值:False

-WhatIf

顯示 Cmdlet 執行時會發生什麼事。 該 Cmdlet 未被執行。

參數屬性

類型:SwitchParameter
預設值:False
支援萬用字元:False
不要顯示:False
別名:威斯康辛

參數集

(All)
Position:Named
必要:False
來自管線的值:False
來自管線按屬性名稱的值:False
來自剩餘引數的值:False

CommonParameters

此 cmdlet 支援常見參數:-Debug、-ErrorAction、-ErrorVariable、-InformationAction、-InformationVariable、-OutBuffer、-OutVariable、-PipelineVariable、-ProgressAction、-Verbose、-WarningAction 和 -WarningVariable。 如需詳細資訊,請參閱 about_CommonParameters。

輸入

PSObject

你可以將任何物件管線化到這個指令檔。

輸出

FileInfo

此 cmdlet 會回傳一個 FileInfo 物件,代表已建立的檔案及其儲存資料。