次の方法で共有


組み込みメンバーについて

簡単な説明

すべての PowerShell オブジェクトで使用できる PowerShell の組み込みメンバーに関する情報を提供します。

詳細な説明

オブジェクトが作成されると、PowerShell によって各オブジェクトにいくつかの "非表示" プロパティとメソッドが追加されます。 これらのプロパティとメソッドは、組み込みメンバーと呼ばれます。 通常、これらの組み込みメンバーはビューから非表示になります。 これらの非表示のメンバーは、Get-MemberForce パラメーターを使用して確認できます。

オブジェクト ビュー

組み込みメンバーには、オブジェクトのビューを表すプロパティのセットである MemberSet が含まれます。 MemberSet プロパティの詳細については、「PSMemberSet」を参照してください。

すべての PowerShell オブジェクトには、次のプロパティが含まれています。

  • psbase

    psbaseMemberSet には、拡張または適応を伴わない基本オブジェクトのメンバーが含まれます。 オブジェクトの種類によっては、[psobject] インスタンスによってラップされた .NET インスタンスか、ラッパーがない場合は入力オブジェクト自体になります。

  • psadapted

    psadaptedMemberSet には、基本オブジェクトと適合メンバー (存在する場合) が表示されます。 適合メンバーは拡張型システム (ETS) によって追加されます。

  • psextended

    psextended MemberSet には、Types.ps1xml ファイルと Add-Member コマンドレットによって追加されたメンバーのみが表示されます。 Add-Member コマンドレットを使用して、実行時に任意のオブジェクトを拡張できます。

  • psobject

    psobjectMemberSet、メソッド、プロパティ、およびオブジェクトに関するその他の情報を含むオブジェクトの豊富なリフレクション ソースです。

例一覧

この例では、$hash はユーザーに関する情報を含むハッシュテーブルです。 Get-MemberForce パラメーターには、オブジェクトの組み込みメンバーが表示されます。

$hash = @{
    Age  = 33
    Name = 'Bob'
}

$hash | Get-Member -Force -MemberType 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のプロパティに変換されていることに注意してください。 新しいプロパティは、psextendedMemberSetの一部になりました。

$user | Get-Member -Force -MemberType 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…

型情報

pstypenamesCodeProperty は、継承順にオブジェクトの種類の階層を一覧表示します。 例えば:

$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 は、不足しているプロパティをすべてのスカラー型の組み込みメンバーとして追加します。

手記

初期化されていない変数は、暗黙のうちに$nullになります。 $null はスカラーであり、組み込みの CountLength が共に0です。

Count プロパティと Length プロパティは似ていますが、データ型によって動作が異なる場合があります。 たとえば、文字列の は、文字列内の文字数です。 Count プロパティは、オブジェクトのインスタンス数です。

PS> $str = 'string'
PS> $str.Length
6
PS> $str.Count
1

これらのプロパティの詳細については、「about_Properties」を参照してください。

配列インデックス スカラー型

オブジェクトがインデックス付きコレクションでない場合、インデックス演算子を使用して最初の要素にアクセスすると、オブジェクト自体が返されます。 最初の要素を超えるインデックス値 $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_Classesを参照してください。