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 |