組み込みメンバーについて
簡単な説明
すべての PowerShell オブジェクトで使用できる PowerShell の組み込みメンバーに関する情報を提供します。
詳しい説明
オブジェクトが作成されると、PowerShell によって各オブジェクトにいくつかの "非表示" プロパティとメソッドが追加されます。 これらのプロパティとメソッドは 、組み込みメンバーと呼ばれます。 これらの組み込みメンバーは、通常、ビューから非表示になります。 これらの非表示のメンバーは、Get-Member の Force パラメーターを使用して確認できます。
オブジェクト ビュー
組み込みメンバーには、オブジェクトのビューを表す MemberSet プロパティのセットが含まれます。 MemberSet プロパティの詳細については、「PSMemberSet」を参照してください。
すべての PowerShell オブジェクトには、次のプロパティが含まれています。
psbase
psbase
MemberSet には、拡張や適応を伴わない基本オブジェクトのメンバーが含まれます。 オブジェクトの種類に応じて、インスタンスによって[psobject]
ラップされた .NET インスタンスであるか、ラッパーがない場合は入力オブジェクト自体になります。psadapted
MemberSet には
psadapted
、基本オブジェクトに加えて、適合されたメンバー (存在する場合) が表示されます。 適合されたメンバーは、拡張型システム (ETS) によって追加されます。psextended
MemberSet には
psextended
、Types.ps1xml ファイルと Add-Member コマンドレットによって追加されたメンバーのみが表示されます。 コマンドレットを使用して、実行時に任意のオブジェクトをAdd-Member
拡張できます。psobject
MemberSet は
psobject
、メソッド、プロパティ、およびオブジェクトに関するその他の情報を含むオブジェクトの豊富なリフレクション ソースです。
例
この例では、 $hash
は、ユーザーに関する情報を含むハッシュテーブルです。
の Get-Member
Force パラメーターは、 オブジェクトの組み込みメンバーを示します。
$hash | Get-Member -Force -Type MemberSet, CodeProperty
TypeName: System.Collections.Hashtable
Name MemberType Definition
---- ---------- ----------
pstypenames CodeProperty System.Collections.ObjectModel.Collection`1[[System.String, System.Private.CoreLib, Version=7…
psadapted MemberSet psadapted {Item, IsReadOnly, IsFixedSize, IsSynchronized, Keys, Values, SyncRoot, Count, Add,…
psbase MemberSet psbase {Item, IsReadOnly, IsFixedSize, IsSynchronized, Keys, Values, SyncRoot, Count, Add, Cl…
psextended MemberSet psextended {}
psobject MemberSet psobject {Members, Properties, Methods, ImmediateBaseObject, BaseObject, TypeNames, get_Membe…
の使用 psobject
は、 の使用 Get-Member
に似ていますが、柔軟性が向上します。 たとえば、オブジェクトのプロパティとその値を列挙できます。
$hash.psobject.Properties | Select-Object Name, MemberType, Value
Name MemberType Value
---- ---------- -----
IsReadOnly Property False
IsFixedSize Property False
IsSynchronized Property False
Keys Property {Age, Name}
Values Property {33, Bob}
SyncRoot Property {[Age, 33], [Name, Bob]}
Count Property 2
ハッシュテーブルを PSCustomObject に変換して作成されたオブジェクトと比較します。
$user = [pscustomobject]$hash
$user.psobject.Properties | Select-Object Name, MemberType, Value
Name MemberType Value
---- ---------- -----
Age NoteProperty 33
Name NoteProperty Bob
ハッシュテーブルのキーが PSCustomObject のプロパティに変換されていることに注意してください。 新しいプロパティが MemberSet のpsextended
一部になりました。
$user | Get-Member -Force -Type MemberSet, CodeProperty
TypeName: System.Management.Automation.PSCustomObject
Name MemberType Definition
---- ---------- ----------
pstypenames CodeProperty System.Collections.ObjectModel.Collection`1[[System.String, System.Private.CoreLib, Version=7…
psadapted MemberSet psadapted {ToString, GetType, Equals, GetHashCode}
psbase MemberSet psbase {ToString, GetType, Equals, GetHashCode}
psextended MemberSet psextended {Age, Name}
psobject MemberSet psobject {Members, Properties, Methods, ImmediateBaseObject, BaseObject, TypeNames, get_Membe…
型情報
CodeProperty はpstypenames
、継承順にオブジェクト型階層を一覧表示します。 たとえば、次のように入力します。
$file = Get-Item C:\temp\test.txt
$file.pstypenames
System.IO.FileInfo
System.IO.FileSystemInfo
System.MarshalByRefObject
System.Object
Output は、最も具体的なオブジェクト型 で始まり、 System.IO.FileInfo
最もジェネリック型の に進みます System.Object
。
メソッド
PowerShell は、すべての PowerShell オブジェクトに 2 つの非表示メソッドを追加します。 これらのメソッドは、コマンドまたはタブ補完を Get-Member -Force
使用して表示されません。
ForEach() と Where()
ForEach()
メソッドと Where()
メソッドは、すべての PowerShell オブジェクトで使用できます。
ただし、コレクションを操作する場合に最も便利です。 これらのメソッドの使用方法の詳細については、「 about_Arrays」を参照してください。
プロパティ
Count プロパティと Length プロパティは、すべての PowerShell オブジェクトで使用できます。 これらは互いに似ていますが、データ型によって動作が異なる場合があります。 これらのプロパティの詳細については、「 about_Properties」を参照してください。
配列インデックスのスカラー型
オブジェクトがインデックス付きコレクションでない場合、index 演算子を使用して最初の要素にアクセスすると、オブジェクト自体が返されます。 最初の要素を超えるインデックス値は を返します $null
。
PS> (2)[0]
2
PS> (2)[-1]
2
PS> (2)[1] -eq $null
True
PS> (2)[0,0] -eq $null
True
詳細については、「 about_Operators」を参照してください。
型の New() メソッド
PowerShell 5.0 以降、PowerShell は、すべての .NET 型に静的 New()
メソッドを追加します。 次の例では、同じ結果が生成されます。
$expression = New-Object -TypeName regex -ArgumentList 'pattern'
$expression = [regex]::new('pattern')
メソッドを使用すると、 new()
を使用 New-Object
するよりもパフォーマンスが向上します。
詳細については、「about_Remote」を参照してください。