次の方法で共有


ConvertFrom-StringData

1 つ以上のキーと値のペアを含む文字列をハッシュ テーブルに変換します。

構文

ConvertFrom-StringData
                [-StringData] <String>
                [<CommonParameters>]

説明

ConvertFrom-StringData コマンドレットは、1 つ以上のキーと値のペアを含む文字列をハッシュ テーブルに変換します。 各キーと値のペアは別々の行にある必要があるため、入力形式として here-strings がよく使用されます。

ConvertFrom-StringData コマンドレットは、スクリプトまたは関数の DATA セクションで使用できる安全なコマンドレットと見なされます。 DATA セクションで使用する場合、文字列の内容は DATA セクションのルールに準拠している必要があります。 詳細については、「about_Data_Sections」を参照してください。

ConvertFrom-StringData は、従来の機械翻訳ツールで許可されているエスケープ文字シーケンスをサポートしています。 つまり、コマンドレットは、スクリプト内の行の終わりを示す Windows PowerShell バックティック文字 (') の代わりに、 Regex.Unescape メソッドを使用して、文字列データ内のバックスラッシュ (\) をエスケープ文字として解釈できます。 here-string 内では、バッククォート文字は機能しません。 また、リテラルのバックスラッシュを \\ のように前にバックスラッシュを付けてエスケープすることで、結果にリテラルのバックスラッシュを保持することもできます。 エスケープされていない円記号 (ファイル パスでよく使用される文字など) は、結果に無効なエスケープ シーケンスとしてレンダリングされる可能性があります。

例 1: ここで一重引用符で囲まれた文字列をハッシュ テーブルに変換する

PS C:\> $Here = @'
Msg1 = The string parameter is required.
Msg2 = Credentials are required for this command.
Msg3 = The specified variable does not exist.
'@
PS C:\> ConvertFrom-StringData -StringData $Here
Name                           Value
----                           -----
Msg3                           The specified variable does not exist.
Msg2                           Credentials are required for this command.
Msg1                           The string parameter is required.

これらのコマンドは、ユーザーメッセージの単一引用符で囲まれた here-string をハッシュテーブルに変換します。 一重引用符で囲まれた文字列では、値は変数に置き換えられず、式は評価されません。

最初のコマンドは、ヒア文字列を作成し、それを$Here変数に保存します。

2 番目のコマンドでは、 ConvertFrom-StringData コマンドレットを使用して、$Here 変数の here-string をハッシュ テーブルに変換します。

例 2: 二重引用符で囲まれた here-string をハッシュ テーブルに変換する

PS C:\> $P = @"
ISE = Windows PowerShell Integrated Scripting Environment
"@
PS C:\> $P | Get-Member
TypeName: System.String

Name             MemberType            Definition
----             ----------            ----------
Clone            Method                System.Object Clone()

PS C:\> $Hash = ConvertFrom-StringData -StringData $P
PS C:\> $Hash | Get-Member
TypeName: System.Collections.Hashtable
Name              MemberType            Definition
----              ----------            ----------
Add               Method                System.Void Add(Object key, Object

これらのコマンドは、 ConvertFrom-StringData が実際に here-string をハッシュ テーブルに変換することを示しています。

最初のコマンドは、1 つのキーと値のペアを含む二重引用符で囲まれた here-string を作成し、それを $P 変数に保存します。

2 番目のコマンドでは、パイプライン演算子 (|) を使用して、$P 変数を Get-Member コマンドレットに送信します。 結果は、$P が文字列 (System.String) であることを示しています。

3 番目のコマンドでは、 ConvertFrom-StringData コマンドレットを使用して、$P の here-string をハッシュ テーブルに変換します。 このコマンドは、結果を $Hash 変数に格納します。

最後のコマンドでは、パイプライン演算子 (|) を使用して、$Hash 変数を Get-Member コマンドレットに送信します。 結果は、$Hash 変数の内容がハッシュ テーブル (System.Collections.Hashtable) であることを示しています。

例 3: here-string をハッシュテーブルに変換する

PS C:\> ConvertFrom-StringData -StringData @'
Name = Disks.ps1

# Category is optional.

Category = Storage
Cost = Free
'@
Name                           Value
----                           -----
Cost                           Free
Category                       Storage
Name                           Disks.ps1

このコマンドは、複数のキーと値のペアを含む一重引用符で囲まれた here-string をハッシュ テーブルに変換します。

このコマンドでは、 StringData パラメータの値は、ヒア文字列を含む変数ではなく、ヒア文字列です。 どちらの形式も有効です。

この文字列には、いずれかの文字列に関するコメントが含まれています。 コメントは、コメントがキーと値のペアとは異なる行にある場合に限り、文字列で有効です。

例 4: 文字列をハッシュ テーブルに変換する

PS C:\> $A = ConvertFrom-StringData -StringData "Top = Red `n Bottom = Blue"
PS C:\> "Top = " + $A.Top
Top = Red PS C:\> "Bottom = " + $A.Bottom
Bottom = Blue

この例では、通常の二重引用符で囲まれた文字列 (here-string ではない) をハッシュ テーブルに変換し、$A 変数に保存します。

各キーと値のペアが別々の行にある必要があるという条件を満たすために、Windows PowerShell の改行文字 ('n) を使用してペアを区切ります。

結果は、入力のハッシュ・テーブルです。 残りのコマンドは出力を表示します。

例 5: スクリプトの DATA セクションで ConvertFrom-StringData を使用する

PS C:\> $TextMsgs = DATA {
ConvertFrom-StringData @'
Text001 = The $Notebook variable contains the name of the user's system notebook.
Text002 = The $MyNotebook variable contains the name of the user's private notebook.
'@
}
PS C:\> $TextMsgs.Text001
The $Notebook variable contains the name of the user's system notebook. PS C:\> $TextMsgs.Text002
The $MyNotebook variable contains the name of the user's private notebook.

この例では、スクリプトの DATA セクションで使用される ConvertFrom-StringData コマンドを示します。 DATA セクションの下のステートメントは、ユーザーにテキストを表示します。

テキストには変数名が含まれているため、変数がリテラルで解釈され、展開されないように、単一引用符で囲む必要があります。 DATA セクションでは変数を使用できません。

例 6: パイプライン演算子を使用して文字列を渡す

PS C:\> $Here = @'
Msg1 = The string parameter is required.
Msg2 = Credentials are required for this command.
Msg3 = The specified variable does not exist.
'@
PS C:\> $Hash = $Here | ConvertFrom-StringData
PS C:\> $Hash
Name     Value
----     -----
Msg3     The specified variable does not exist.
Msg2     Credentials are required for this command.
Msg1     The string parameter is required.

この例では、パイプライン演算子 (|) を使用して文字列を ConvertFrom-StringData に送信できることを示しています。

最初のコマンドは、$Here 変数に here-string を保存します。 2 番目のコマンドでは、パイプライン演算子 (|) を使用して、$Here 変数を ConvertFrom-StringData に送信します。 このコマンドは、結果を $Hash 変数に保存します。

最後のコマンドは、$Hash変数の内容を表示します。

例 7: エスケープ文字を使用して改行と戻り文字を追加する

PS C:\> ConvertFrom-StringData @"
Vincentio = Heaven doth with us as we with torches do,\nNot light them for themselves; for if our virtues\nDid not go forth of us, 'twere all alike\nAs if we had them not.
Angelo = Let there be some more test made of my metal,\nBefore so noble and so great a figure\nBe stamp'd upon it.
"@ | Format-List
Name  : Angelo

Value : Let there be some more test made of my metal,
        Before so noble and so great a figure
        Be stamp'd upon it.

Name  : Vincentio
Value : Heaven doth with us as we with torches do,
        Not light them for themselves; for if our virtues
        Did not go forth of us, 'twere all alike
        As if we had them not.

この例では、エスケープ文字を使用して新しい行を作成し、 ConvertFrom-StringData で文字を返す方法を示します。 この例では、エスケープ シーケンス \n を使用して、名前または項目 (結果のハッシュ テーブルの名前) に関連付けられたテキスト ブロック (結果のハッシュ テーブルの値) 内に新しい行を作成します。

例 8: 円記号エスケープ文字を使用してファイル パスを正しくレンダリングする

PS C:\> ConvertFrom-StringData "Message=Look in c:\\Windows\\System32"
Name                           Value
----                           -----
Message                        Look in c:\Windows\System32

この例では、文字列データで円記号エスケープ文字を使用して、結果の ConvertFrom-StringData ハッシュ テーブルでファイル パスが正しくレンダリングされる方法を示します。 二重円記号を使用すると、リテラル円記号がハッシュ テーブルの出力で正しくレンダリングされます。

パラメーター

-StringData

変換する文字列を指定します。 このパラメーターを使用するか、文字列を ConvertFrom-StringData にパイプ処理できます。 パラメーター名は省略可能です。

このパラメーターの値は、単一引用符で囲まれた文字列、二重引用符で囲まれた文字列、または 1 つ以上のキーと値のペアを含む here-string である必要があります。 各キーと値のペアは別々の行にあるか、各ペアを改行文字 ('n) で区切る必要があります。

文字列にコメントを含めることができますが、コメントをキーと値のペアと同じ行にすることはできません。 コメントはハッシュ テーブルに含まれません。

here-string は、引用符がリテラルで解釈される 1 つ以上の行で構成される文字列です。 詳細については、「about_Quoting_Rules」を参照してください。

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

入力

String

キーと値のペアを含む文字列を ConvertFrom-StringData にパイプ処理できます。

出力

Hashtable

このコマンドレットは、キーと値のペアから作成したハッシュ テーブルを返します。

メモ

  • here-string は、引用符がリテラルで解釈される 1 つ以上の行で構成される文字列です。

    このコマンドレットは、複数の音声言語でユーザー メッセージを表示するスクリプトで役立ちます。 辞書スタイルのハッシュ テーブルを使用すると、リソース ファイルなどのコードからテキスト文字列を分離したり、翻訳ツールで使用するテキスト文字列の書式を設定したりできます。