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