次の方法で共有


Export-Clixml

1 つまたは複数のオブジェクトの 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>]

説明

Export-Clixml コマンドレットは、オブジェクトを共通言語インフラストラクチャ (CLI) XML ベースの表現にシリアル化し、ファイルに格納します。 その後、 Import-Clixml コマンドレットを使用して、そのファイルの内容に基づいて保存されたオブジェクトを再作成できます。 CLI の詳細については、「 Language independence」を参照してください。

このコマンドレットは ConvertTo-Xmlに似ていますが、結果の XML Export-Clixml ファイルに格納される点が異なります。 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

Get-Acl コマンドレットは、Test.txt ファイルのセキュリティ記述子を取得します。 パイプラインの下にオブジェクトを送信して、セキュリティ記述子を Export-Clixmlに渡します。 オブジェクトの XML ベースの表現は、 FileACL.xmlという名前のファイルに格納されます。

Import-Clixml コマンドレットは、FileACL.xml ファイル内の XML からオブジェクトを作成します。 次に、オブジェクトを $fileacl 変数に保存します。

例 3: Windows でエクスポートされた資格情報オブジェクトを暗号化する

この例では、Get-Credential コマンドレットを実行して$Credential変数に格納した資格情報を指定すると、Export-Clixml コマンドレットを実行して資格情報をディスクに保存できます。

重要

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

Export-Clixml コマンドレットは、Windows Data Protection API を使用して資格情報オブジェクトを暗号化します。 暗号化により、そのコンピューター上のユーザー アカウントのみが資格情報オブジェクトの内容の暗号化を解除できるようになります。 エクスポートされた CLIXML ファイルを別のコンピューターまたは別のユーザーで使用することはできません。

この例では、資格情報が格納されているファイルは TestScript.ps1.credentialで表されます。 TestScript を、資格情報を読み込むスクリプトの名前に置き換えます。

パイプラインの下に資格情報オブジェクトを送信して Export-Clixmlし、最初のコマンドで指定したパス ( $Credxmlpath) に保存します。

資格情報をスクリプトに自動的にインポートするには、最後の 2 つのコマンドを実行します。 Import-Clixmlを実行して、セキュリティで保護された資格情報オブジェクトをスクリプトにインポートします。 このインポートにより、スクリプト内のプレーンテキスト パスワードが公開されるリスクがなくなります。

例 4: Linux または macOS での資格情報オブジェクトのエクスポート

この例では、Get-Credential コマンドレットを使用して、$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 ファイル内の資格情報に注目するために切り捨てられました。 パスワードのプレーン テキスト値は、 Format-Hexによって実証された Unicode 文字配列として XML ファイルに格納されることに注意してください。 そのため、値はエンコードされますが、暗号化されません。

パラメーター

-Confirm

コマンドレットの実行前に確認を求めるメッセージが表示されます。

型:SwitchParameter
Aliases:cf
配置:Named
規定値:False
必須:False
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:False

-Depth

XML 表現に含める子オブジェクトのレベルを指定します。 既定値は 2 です。

Types.ps1xml ファイル内のオブジェクト型の既定値をオーバーライドできます。 詳細については、 about_Types.ps1xml を参照してください。

型:Int32
配置:Named
規定値:2
必須: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: バイト オーダー マーク (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 を渡すことができます。

Note

UTF-7* を使用することは推奨されなくなりました。 PowerShell 7.1 の時点で、Encoding パラメーターにutf7を指定すると警告が書き込まれます。

型:Encoding
指定可能な値:ASCII, BigEndianUnicode, BigEndianUTF32, OEM, Unicode, UTF7, UTF8, UTF8BOM, UTF8NoBOM, UTF32
配置:Named
規定値:UTF8NoBOM
必須:False
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:False

-Force

ユーザーに確認せずに、直ちにコマンドを実行します。

必要に応じて、このコマンドレットは出力ファイルの読み取り専用の属性をクリアします。 コマンドが完了すると、このコマンドレットが読み取り専用の属性をリセットしようとします。

型:SwitchParameter
配置:Named
規定値:False
必須:False
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:False

-InputObject

変換するオブジェクトを指定します。 オブジェクトが格納されている変数を入力するか、オブジェクトを取得するコマンドまたは式を入力します。 オブジェクトをパイプ処理して Export-Clixmlすることもできます。

型:PSObject
配置:Named
規定値:None
必須:True
パイプライン入力を受け取る:True
ワイルドカード文字を受け取る:False

-LiteralPath

オブジェクトの XML 表現が格納されるファイルへのパスを指定します。 Path とは異なり、LiteralPath パラメーターの値は、型指定されたとおりに使用されます。 ワイルドカードとして解釈される文字はありません。 パスにエスケープ文字が含まれている場合は、単一引用符で囲みます。 単一引用符は、エスケープ シーケンスとして文字を解釈しないように PowerShell に指示します。

型:String
Aliases:PSPath, LP
配置:Named
規定値:None
必須:True
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:False

-NoClobber

コマンドレットが既存のファイルの内容を上書きしないことを示します。 既定では、指定したパスにファイルが存在する場合、 Export-Clixml は警告なしでファイルを上書きします。

型:SwitchParameter
Aliases:NoOverwrite
配置:Named
規定値:False
必須:False
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:False

-Path

オブジェクトの XML 表現が格納されるファイルへのパスを指定します。

型:String
配置:0
規定値:None
必須:True
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:False

-WhatIf

コマンドレットの実行時に発生する内容を示します。 コマンドレットは実行されません。

型:SwitchParameter
Aliases:wi
配置:Named
規定値:False
必須:False
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:False

入力

PSObject

任意のオブジェクトをこのコマンドレットにパイプライン処理できます。

出力

FileInfo

このコマンドレットは、保存されたデータを含む作成されたファイルを表す FileInfo オブジェクトを返します。