about_Properties

簡単な説明

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

長い説明

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

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

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

また、and 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

こちらもご覧ください