about_Properties

適用対象: Windows PowerShell 2.0, Windows PowerShell 3.0, Windows PowerShell 4.0, Windows PowerShell 5.0

トピック

about_Properties

概要

Windows PowerShell のオブジェクト プロパティの使用方法について説明します。

詳細説明

Windows PowerShell では、オブジェクトと呼ばれる構造化された情報コレクションを使用して、データ ストア内の項目またはコンピューターの状態を表します。通常、Microsoft .NET Framework に含まれているオブジェクトを使用しますが、Windows PowerShell でカスタム オブジェクトを作成することもできます。

項目とそのオブジェクトは密接に関連付けられています。オブジェクトを変更すると、通常、そのオブジェクトが表す項目も変更されます。たとえば、Windows PowerShell でファイルを取得する場合、実際のファイルは取得しません。代わりに、ファイルを表す FileInfo オブジェクトを取得します。FileInfo オブジェクトを変更すると、ファイルも変更されます。

ほとんどのオブジェクトにはプロパティがあります。プロパティは、オブジェクトに関連付けられているデータです。オブジェクトの種類によってさまざまなプロパティがあります。たとえば、ファイルを表す FileInfo オブジェクトには IsReadOnly プロパティがあり、ここには、ファイルに読み取り専用属性がある場合は $True、ない場合は $False が含まれます。ファイル システム ディレクトリを表す DirectoryInfo オブジェクトには Parent プロパティがあり、ここには、親ディレクトリへのパスが含まれます。

オブジェクトのプロパティ

オブジェクトのプロパティを取得するには、Get-Member コマンドレットを使用します。たとえば、FileInfo オブジェクトのプロパティを取得するには、Get-ChildItem コマンドレットを使用して、ファイルを表す FileInfo オブジェクトを取得します。次に、パイプライン演算子 (|) を使用して、FileInfo オブジェクトを Get-Member に渡します。次のコマンドは、PowerShell.exe ファイルを取得して Get-Member に渡します。$Pshome 自動変数には、Windows PowerShell インストール ディレクトリのパスが含まれています。

         Get-ChildItem $pshome\PowerShell.exe | Get-Member

コマンドの出力には、FileInfo オブジェクトのメンバーが一覧表示されます。メンバーには、プロパティとメソッドの両方が含まれます。Windows PowerShell で作業するときには、オブジェクトのすべてのメンバーにアクセスできます。

オブジェクトのプロパティのみを取得し、メソッドを取得しない場合は、次の例のように、Get-Member コマンドレットの MemberType パラメーターで、値 "property" を指定します。

         Get-ChildItem $pshome\PowerShell.exe | Get-Member -MemberType property

            TypeName: System.IO.FileInfo
        
         Name              MemberType Definition
         ----              ---------- ----------
         Attributes        Property   System.IO.FileAttributes Attributes {get;set;}
         CreationTime      Property   System.DateTime CreationTime {get;set;}
         CreationTimeUtc   Property   System.DateTime CreationTimeUtc {get;set;}
         Directory         Property   System.IO.DirectoryInfo Directory {get;}
         DirectoryName     Property   System.String DirectoryName {get;}
         Exists            Property   System.Boolean Exists {get;}
         Extension         Property   System.String Extension {get;}
         FullName          Property   System.String FullName {get;}
         IsReadOnly        Property   System.Boolean IsReadOnly {get;set;}
         LastAccessTime    Property   System.DateTime LastAccessTime {get;set;}
         LastAccessTimeUtc Property   System.DateTime LastAccessTimeUtc {get;set;}
         LastWriteTime     Property   System.DateTime LastWriteTime {get;set;}
         LastWriteTimeUtc  Property   System.DateTime LastWriteTimeUtc {get;set;}
         Length            Property   System.Int64 Length {get;}
         Name              Property   System.String Name {get;}

プロパティを検索した後、そのプロパティを Windows PowerShell コマンドで使用できます。

プロパティ値

特定の種類のオブジェクトにはすべて同じプロパティがありますが、これらのプロパティの値は特定のオブジェクトを説明するものです。たとえば、すべての FileInfo オブジェクトに CreationTime プロパティがありますが、そのプロパティの値はファイルごとに異なります。

オブジェクトのプロパティの値を取得する最も一般的な方法として、ドット メソッドを使用します。オブジェクトが格納されている変数などのオブジェクトへの参照、またはオブジェクトを取得するコマンドを入力します。次に、ドット (.) に続けてプロパティ名を入力します。

たとえば、次のコマンドでは、PowerShell.exe ファイルの CreationTime プロパティの値が表示されます。Get-ChildItem コマンドは、PowerShell.exe ファイルを表す FileInfo オブジェクトを返します。プロパティにアクセスする前にコマンドが実行されるように、コマンドはかっこで囲みます。次のように、Get-ChildItem コマンドの後に、ドットと CreationTime プロパティの名前を続けます。

         C:\PS> (Get-ChildItem $pshome\PowerShell.exe).creationtime
         Tuesday, March 18, 2008 12:07:52 AM

次の例に示すように、オブジェクトを変数に保存して、ドット メソッドでそのプロパティを取得することもできます。

         C:\PS> $a = Get-ChildItem $pshome\PowerShell.exe
         C:\PS> $a.CreationTime
         Tuesday, March 18, 2008 12:07:52 AM

また、Select-Object コマンドレットと Format-List コマンドレットを使用して、オブジェクトのプロパティ値を表示することもできます。Select-Object と Format-List のそれぞれに Property パラメーターがあります。Property パラメーターを使用して、1 つ以上のプロパティとその値を指定できます。または、すべてのプロパティを表すワイルドカード文字 (*) を使用できます。

たとえば、次のコマンドでは、PowerShell.exe ファイルのすべてのプロパティの値が表示されます。

         C:\PS> Get-ChildItem $pshome\PowerShell.exe | Format-List -property *

         PSPath            : Microsoft.PowerShell.Core\FileSystem::C:\Windows\system32\WindowsPowerShell\v1.0\PowerShell.exe
         PSParentPath      : Microsoft.PowerShell.Core\FileSystem::C:\Windows\system32\WindowsPowerShell\v1.0
         PSChildName       : PowerShell.exe
         PSDrive           : C
         PSProvider        : Microsoft.PowerShell.Core\FileSystem
         PSIsContainer     : False
         VersionInfo       : File:             C:\Windows\system32\WindowsPowerShell\v1.0\PowerShell.exe
                             InternalName:     POWERSHELL
                             OriginalFilename: PowerShell.EXE.MUI
                             File Version:      6.1.6570.1 (fbl_srv_PowerShell(nigels).070711-0102)
                             FileDescription:  PowerShell.EXE
                             Product:          Microsoft® Windows® Operating System
                             ProductVersion:   6.1.6570.1
                             Debug:            False
                             Patched:          False
                             PreRelease:       False
                             PrivateBuild:     True
                             SpecialBuild:     False
                             Language:         English (United States)

         BaseName          : PowerShell
         Mode              : -a---
         Name              : PowerShell.exe
         Length            : 160256
         DirectoryName     : C:\Windows\system32\WindowsPowerShell\v1.0
         Directory         : C:\Windows\system32\WindowsPowerShell\v1.0
         IsReadOnly        : False
         Exists            : True
         FullName          : C:\Windows\system32\WindowsPowerShell\v1.0\PowerShell.exe
         Extension         : .exe
         CreationTime      : 3/18/2008 12:07:52 AM
         CreationTimeUtc   : 3/18/2008 7:07:52 AM
         LastAccessTime    : 3/19/2008 8:13:58 AM
         LastAccessTimeUtc : 3/19/2008 3:13:58 PM
         LastWriteTime     : 3/18/2008 12:07:52 AM
         LastWriteTimeUtc  : 3/18/2008 7:07:52 AM
         Attributes        : Archive
        

静的プロパティ

Windows PowerShell では .NET クラスの静的プロパティを使用できます。静的プロパティは、オブジェクトのプロパティである標準プロパティとは異なり、クラスのプロパティです。

クラスの静的プロパティを取得するには、Get-Member コマンドレットの Static パラメーターを使用します。

たとえば、次のコマンドは、System.DateTime クラスの静的プロパティを取得します。

        Get-Date | Get-Member -MemberType Property -Static

           TypeName: System.DateTime

        Name     MemberType Definition
        ----     ---------- ----------
        MaxValue Property   static datetime MaxValue {get;}
        MinValue Property   static datetime MinValue {get;}
        Now      Property   datetime Now {get;}
        Today    Property   datetime Today {get;}
        UtcNow   Property   datetime UtcNow {get;}

静的プロパティの値を取得するには、次の構文を使用します。

        [<ClassName>]::<Property>

たとえば、次のコマンドは、System.DateTime クラスの UtcNow 静的プロパティの値を取得します。

        [System.DateTime]::UtcNow

スカラー オブジェクトおよびコレクションのプロパティ

特定の種類の 1 つの ("スカラー") オブジェクトのプロパティは、多くの場合、同じ種類のオブジェクトのコレクションのプロパティとは異なります。

たとえば、すべてのサービスに DisplayName プロパティがありますが、サービスのコレクションには DisplayName プロパティはありません。同様に、すべてのコレクションに、コレクション内のオブジェクトの数を示す Count プロパティがありますが、個々のオブジェクトには Count プロパティはありません。

Windows PowerShell 3.0 以降、Windows PowerShell では、スカラー オブジェクトとコレクションのプロパティの違いに起因するスクリプトのエラーを防止しようとしています。

-- コレクションを送信して、単一の ("スカラー") オブジェクトにのみ存在するプロパティを要求した場合、Windows PowerShell は、コレクション内のすべてのオブジェクトのそのプロパティ値を返します。

-- 0 個のオブジェクトまたは 1 つのオブジェクトの Count または Length プロパティを要求した場合、Windows PowerShell は、適切な値を返します。

プロパティが個々のオブジェクトにもコレクションにも存在する場合、Windows PowerShell は結果を変えません。

この機能は、スカラー オブジェクトとコレクションのメソッドでも機能します。詳細については、「about_Methods」を参照してください。

たとえば、各サービスには DisplayName プロパティがあります。次のコマンドは、Audiosrv サービスの DisplayName プロパティの値を取得します。

        PS C:\>(Get-Service Audiosrv).DisplayName
        Windows Audio

ただし、サービスのコレクションまたは配列には DisplayName はありません。Windows PowerShell 2.0 では、次のコマンドは、すべてのサービスの DisplayName プロパティを取得しようとします。

        PS C:\>(Get-Service).DisplayName
        PS C:\>

Windows PowerShell 3.0 以降では、同じコマンドで、Get-Service が返すすべてのサービスの DisplayName プロパティの値が返されます。

        PS C:\>(Get-Service).DisplayName
        Application Experience
        Application Layer Gateway Service
        Windows All-User Install Agent
        Application Identity
        Application Information
        ...

逆に、2 つ以上のサービスのコレクションには、コレクション内のオブジェクトの数を格納する Count プロパティがあります。

        PS C:\>(Get-Service).Count
        176

このコマンドで示されるように、Windows PowerShell 2.0 では、個々のサービスに Count または Length プロパティはありません。

        PS C:\>(Get-Service Audiosrv).Count
        PS C:\>

Windows PowerShell 3.0 以降では、このコマンドで正しい Count 値が返されます。

        PS C:\>(Get-Service Audiosrv).Count
        1

関連項目

about_Methods

about_Objects

Get-Member

Select-Object

Format-List