次の方法で共有


プロパティについて

簡単な説明

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

長い説明

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

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

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

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

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

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

コマンドの出力には、 FileInfoオブジェクトのメンバーが一覧表示されます。 メンバーには、プロパティとメソッドの両方が含まれます。 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;}

プロパティが見つかったら、それらを PowerShell コマンドで使用できます。

プロパティ値

特定の型のすべてのオブジェクトに同じプロパティがありますが、これらのプロパティの値によって特定のオブジェクトが記述されます。 たとえば、すべての FileInfo オブジェクトには、"ファイルの時刻" プロパティがありますが、そのプロパティの値はファイルごとに異なります。

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

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

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

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

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

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

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

Get-ChildItem $pshome\PowerShell.exe | Format-List -Property *
PSPath            : Microsoft.PowerShell.Core\FileSystem::C:\Windows\System3
                    2\WindowsPowerShell\v1.0\PowerShell.exe
PSParentPath      : Microsoft.PowerShell.Core\FileSystem::C:\Windows\System3
                    2\WindowsPowerShell\v1.0
PSChildName       : PowerShell.exe
PSDrive           : C
PSProvider        : Microsoft.PowerShell.Core\FileSystem
PSIsContainer     : False
Mode              : -a----
VersionInfo       : File:             C:\Windows\System32\WindowsPowerShell\
                    v1.0\PowerShell.exe
                    InternalName:     POWERSHELL
                    OriginalFilename: PowerShell.EXE.MUI
                    FileVersion:      10.0.16299.15 (WinBuild.160101.0800)
                    FileDescription:  Windows PowerShell
                    Product:          Microsoft Windows Operating System
                    ProductVersion:   10.0.16299.15
                    Debug:            False
                    Patched:          False
                    PreRelease:       False
                    PrivateBuild:     False
                    SpecialBuild:     False
                    Language:         English (United States)

BaseName          : PowerShell
Target            : {C:\Windows\WinSxS\amd64_microsoft-windows-powershell-ex
                    e_31bf3856ad364e35_10.0.16299.15_none_8c022aa6735716ae\p
                    owershell.exe}
LinkType          : HardLink
Name              : PowerShell.exe
Length            : 449024
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.ex
Extension         : .exe
CreationTime      : 9/29/2017 6:43:19 AM
CreationTimeUtc   : 9/29/2017 1:43:19 PM
LastAccessTime    : 9/29/2017 6:43:19 AM
LastAccessTimeUtc : 9/29/2017 1:43:19 PM
LastWriteTime     : 9/29/2017 6:43:19 AM
LastWriteTimeUtc  : 9/29/2017 1:43:19 PM
Attributes        : Archive

静的プロパティ

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>

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

[System.DateTime]::UtcNow

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

特定の型の1つの ("スカラー") オブジェクトのプロパティは、多くの場合、同じ型のオブジェクトのコレクションのプロパティとは異なります。 たとえば、すべてのサービスにはdisplaynameプロパティがありますが、サービスのコレクションにはdisplaynameプロパティがありません。

次のコマンドは、' Audiosrv ' サービスのDisplayNameプロパティの値を取得します。

(Get-Service Audiosrv).DisplayName
Windows Audio

PowerShell 3.0 以降、PowerShell は、スカラーオブジェクトとコレクションの異なるプロパティに起因するスクリプトエラーを防止しようとします。 同じコマンドを実行すると、を返すすべてのサービスのDisplayNameプロパティの値が返され Get-Service ます。

(Get-Service).DisplayName
Application Experience
Application Layer Gateway Service
Windows All-User Install Agent
Application Identity
Application Information
...

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

すべてのコレクションには、コレクションに含まれるオブジェクトの数を返すCountプロパティがあります。

(Get-Service).Count
176

PowerShell 3.0 以降、0個のオブジェクトまたは1つのオブジェクトの Count または Length プロパティを要求した場合、PowerShell は正しい値を返します。

(Get-Service Audiosrv).Count
1

プロパティが個々のオブジェクトとコレクションに存在する場合は、コレクションのプロパティだけが返されます。

$collection = @(
[pscustomobject]@{length = "foo"}
[pscustomobject]@{length = "bar"}
)
# PowerShell returns the collection's Length.
$collection.length
2

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

関連項目

about_Methods

about_Objects

Get-Member

Select-Object

Format-List