ja-JP/about_PSCustomObject.help.txt

TOPIC
    about_PSCustomObject

簡単な説明
    [pscustomobject] 型アクセラレーターと [psobject] 型アクセラレーター
    の違い、およびカスタムオブジェクトの作成方法について説明します。

詳細な説明
    [pscustomobject] は、ハッシュテーブルからカスタムオブジェクトを
    手軽に作成するための型アクセラレーターです。

    PowerShell 3.0 より前では、カスタムオブジェクトの作成に
    New-Object と Add-Member を使用する必要がありました。

        $object1 = New-Object -TypeName psobject
        Add-Member -InputObject $object1 -MemberType NoteProperty `
            -Name one -Value 1
        Add-Member -InputObject $object1 -MemberType NoteProperty `
            -Name two -Value 2
        $object1

    PowerShell 3.0 以降では、ハッシュテーブルを [pscustomobject] に
    キャストすることで同じ結果を得られます。

        $object3 = [pscustomobject]@{ one = 1; two = 2 }
        $object3 | Get-Member
        $object3

    変数に格納したハッシュテーブルもキャストできます。

        $hash = @{
            Name = "Server30"
            System = "Server Core"
            PSVersion = "4.0"
        }
        $Asset = [pscustomobject]$hash
        $Asset

    リテラルのハッシュテーブルを [pscustomobject] にキャストすると、
    キーの順序が保持されます。


    [psobject] と [pscustomobject] の違い

    どちらの型アクセラレーターも、最終的には同じ基底クラス
    (PSObject) を表します。ただし [pscustomobject] には、
    ハッシュテーブルを PSObject 型に変換する追加の処理が含まれます。

    [psobject] でキャストしてもハッシュテーブルは元の型のまま
    ですが、[pscustomobject] でキャストすると PSCustomObject に
    変換されます。

        ([psobject]@{Property = 'Value'}).GetType().FullName
        # System.Collections.Hashtable

        ([pscustomobject]@{Property = 'Value'}).GetType().FullName
        # System.Management.Automation.PSCustomObject

    [psobject] は、値を見えないラッパーで包む点にも注意が
    必要です。これは -is 演算子や -f 演算子などの動作に影響します。

        1 -is [int32] # True
        1 -is [psobject] # False
        ([psobject] 1) -is [int32] # True
        ([psobject] 1) -is [psobject] # True

    ラップされた配列は、-f (書式設定) 演算子で展開されないため
    エラーになることがあります。

        '{0} {1}' -f (1, 2) # 1 2
        '{0} {1}' -f ([psobject] (1, 2)) # エラーになる


    キーの大文字小文字に関する注意

    大文字小文字だけが異なるキーを含むハッシュテーブルを
    [pscustomobject] にキャストすると、プロパティ名には最初の
    キーの大文字小文字が使われ、値には最後に一致したキーの値が
    使われます。

        $Json = '{
          "One": 1,
          "two": 2,
          "Two": 3,
          "three": 3,
          "Three": 4,
          "THREE": 5
        }'
        $OrderedHashTable = $Json | ConvertFrom-Json -AsHashTable
        [pscustomobject]$OrderedHashTable


    Length と Count プロパティ

    Windows PowerShell では、カスタムオブジェクトに Length および
    Count プロパティはありませんでした。PowerShell 6 以降では、
    これらのプロパティに値 1 が割り当てられます。

        $object = [pscustomobject]@{ key = 'value' }
        $object.Count # 1
        $object.Length # 1

関連項目
    about_Hash_Tables
    about_Objects
    about_Object_Creation
    New-Object
    Add-Member

----
原文: PowerShell-Docs (CC BY 4.0) の翻訳 / PSHelpJaJP