PSObject
ドキュメントから:
使用可能なメンバーの代替ビューとそれらを拡張する方法を提供するオブジェクトをラップします。メンバーには、メソッド、プロパティ、パラメータ化されたプロパティなどがあります。
つまり、aPSObject
は、作成後にメソッドとプロパティを追加できるオブジェクトです。
「ハッシュテーブルについて」のドキュメントから:
ハッシュテーブルは、辞書または連想配列とも呼ばれ、1つ以上のキーと値のペアを格納するコンパクトなデータ構造です。
..。
ハッシュテーブルは、データの検索と取得に非常に効率的であるため、頻繁に使用されます。
PowerShellではにプロパティを追加できるため、のPSObject
ようなものを使用できますが、プロパティなどの特定の機能にアクセスできなくなるため、これを行うべきではありません。また、パフォーマンスコストと追加のメモリ使用量が発生する可能性があります。Hashtable
PSObjects
Hashtable
Keys
Values
PowerShellのドキュメントには、次の情報が含まれていますPSCustomObject
。
パラメーターのないPSObjectのコンストラクターが使用される場合、プレースホルダーBaseObjectとして機能します。
これは私にはわかりませんでしたが、PowerShellの多くの本の共著者によるPowerShellフォーラムへの投稿はより明確に思えます。
[PSCustomObject]はタイプアクセラレータです。PSObjectを構築しますが、ハッシュテーブルキーがプロパティになるように構築します。PSCustomObjectは、それ自体がオブジェクトタイプではなく、プロセスのショートカットです。... PSCustomObjectは、コンストラクターパラメーターなしでPSObjectが呼び出されたときに使用されるプレースホルダーです。
あなたのコードに関して@{a=1;b=2;c=3}
は、Hashtable
です。に変換したり、エラーを生成したり[PSObject]@{a=1;b=2;c=3}
しません。オブジェクトは。のままです。ただし、をに変換します。なぜこれが起こるのかを説明するドキュメントを見つけることができませんでした。Hashtable
PSObject
Hashtable
[PSCustomObject]@{a=1;b=2;c=3}
Hashtable
PSObject
Hashtable
キーをプロパティ名として使用するためにをオブジェクトに変換する場合は、次のコード行のいずれかを使用できます。
[PSCustomObject]@{a=1;b=2;c=3}
# OR
New-Object PSObject -Property @{a=1;b=2;c=3}
# NOTE: Both have the type PSCustomObject
Hashtables
いくつかのキーがプロパティ名であるオブジェクトに変換する場合は、次のコードを使用できます。
@{name='a';num=1},@{name='b';num=2} |
% { [PSCustomObject]$_ }
# OR
@{name='a';num=1},@{name='b';num=2} |
% { New-Object PSObject -Property $_ }
<#
Outputs:
name num
---- ---
a 1
b 2
#>
に関するドキュメントを見つけるのNoteProperty
は困難でした。ドキュメントには、Add-Member
-MemberType
以外のオブジェクトプロパティを追加するのに意味のあるものはありませんNoteProperty
。Windows PowerShellクックブック(第3版)では、メンバータイプを次のように定義してNoteproperty
います。
指定した初期値によって定義されるプロパティ
- Lee、H.(2013)。WindowsPowerShellクックブック。O'Reilly Media、Inc.p。895。