次の方法で共有


about_Properties

簡単な説明

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

長い説明

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

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

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

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

オブジェクトのプロパティを取得するには、 コマンドレットを 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 オブジェクトには CreationTime プロパティがありますが、そのプロパティの値はファイルごとに異なります。

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

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

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

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

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

および Format-List コマンドレットをSelect-Object使用して、オブジェクトのプロパティ値を表示することもできます。 Select-ObjectFormat-List には Property パラメーターがあります。 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

メンバーアクセス列挙

PowerShell 3.0 以降では、メンバー アクセス演算子 (.) を使用してリスト コレクションに存在しないプロパティにアクセスすると、PowerShell はコレクション内のアイテムを自動的に列挙し、各アイテムの プロパティの値を返します。 詳細については、「 about_Member-Access_Enumeration」を参照してください。

このコマンドは、 を返すすべてのサービスの DisplayName プロパティの値を Get-Service 返します。

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

すべてのコレクションには、コレクション内のオブジェクトの数を返す 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

こちらもご覧ください