Select-Objectの使い方:オブジェクトのプロパティを選択する

広告

Select-Object コマンドレットを使用すると、オブジェクトの指定したプロパティを取得したり、表示する項目を絞り込んだりすることができます。他のコマンドの実行結果として取得したオブジェクトをパイプを介して受け取り、必要なプロパティだけを取り出したい場合によく使用されます。ここでは PowerShell における Select-Object コマンドレットの使い方について解説します。

Select-Objectコマンドレットの書式

Select-Object コマンドレットは、オブジェクトの指定したプロパティを取得したり、表示する項目を絞り込んだりするためのコマンドレットです。 Select-Object コマンドレットの書式は次の通りです。

Select-Object
  [[-Property] <Object[]>]
  [-InputObject <PSObject>]
  [-ExcludeProperty <String[]>]
  [-ExpandProperty <String>]
  [-Unique]
  [-CaseInsensitive]
  [-Last <Int32>]
  [-First <Int32>]
  [-Skip <Int32>]
  [-Wait]
  [<CommonParameters>]

Select-Object はエイリアスとして select が定義されています。

select -> Select-Object

Select-Object を使ってオブジェクトの指定したプロパティを取得するには次の書式を使用します。

Select-Object -Property プロパティ名1, プロパティ名2, ...

-Property では、表示したいプロパティ名をカンマで区切って指定します。

-Property は省略可能なので、通常は次のように実行します。

Select-Object プロパティ名1, プロパティ名2, ...

対象となるオブジェクトは、パイプ(|)を使って Select-Object に渡します。

それでは実際に試してみます。次のように実行してください。

Get-ChildItem c:\tmp\file | Select-Object FullName, CreationTime, LastWriteTime

次のように画面に表示されました。

Select-Objectコマンドレットの使い方(1)

Get-ChildItem を使って指定したパスにあるファイルやディレクトリのオブジェクトを取得し、パイプを使って Select-Object へ渡し、指定した 3 つのプロパティだけが表示されていることが確認できます。

すべてのプロパティを取得する

プロパティとしてアスタリスク(*)を指定すると、すべてのプロパティを表示します。どのようなプロパティが存在するかを確認したい場合などに便利です。

次の例では特定のファイルを表すオブジェクトの、すべてのプロパティを取得しています。

Get-ChildItem c:\tmp\file\gadget.txt | Select-Object *

次のように、通常は表示されない詳細なプロパティも含めてすべて表示されました。

PS C:\code\powershell> Get-ChildItem c:\tmp\file\gadget.txt | Select-Object *

PSPath              : Microsoft.PowerShell.Core\FileSystem::C:\tmp\file\gadg
                      et.txt
PSParentPath        : Microsoft.PowerShell.Core\FileSystem::C:\tmp\file
PSChildName         : gadget.txt
PSDrive             : C
PSProvider          : Microsoft.PowerShell.Core\FileSystem
PSIsContainer       : False
Mode                : -a---
ModeWithoutHardLink : -a---
VersionInfo         : File:             C:\tmp\file\gadget.txt
                      InternalName:
                      OriginalFilename:
                      FileVersion:
                      FileDescription:
                      Product:
                      ProductVersion:
                      Debug:            False
                      Patched:          False
                      PreRelease:       False
                      PrivateBuild:     False
                      SpecialBuild:     False
                      Language:

BaseName            : gadget
ResolvedTarget      : C:\tmp\file\gadget.txt
Target              :
LinkType            :
Name                : gadget.txt
Length              : 232
DirectoryName       : C:\tmp\file
Directory           : C:\tmp\file
IsReadOnly          : False
Exists              : True
FullName            : C:\tmp\file\gadget.txt
Extension           : .txt
CreationTime        : 2026/04/19 5:14:28
CreationTimeUtc     : 2026/04/18 20:14:28
LastAccessTime      : 2026/04/27 19:51:08
LastAccessTimeUtc   : 2026/04/27 10:51:08
LastWriteTime       : 2026/04/25 8:59:54
LastWriteTimeUtc    : 2026/04/24 23:59:54
LinkTarget          :
UnixFileMode        : -1
Attributes          : Archive

ただし、すべてのプロパティを表示すると情報量が多くなり見づらくなるため、通常は必要なプロパティだけを指定して取得するのが一般的です。

表示する件数を制限する

Select-Object では表示する件数を制限するためのオプションがいくつか用意されています。最初に制限をしなかった場合にどのように取得するのかを確認します。次のように実行してください。

Get-ChildItem c:\tmp\file | Select-Object FullName

実行結果は次のようになります。

PS C:\code\powershell> Get-ChildItem c:\tmp\file | Select-Object FullName

FullName
--------
C:\tmp\file\access.back
C:\tmp\file\access.log
C:\tmp\file\address.txt
C:\tmp\file\furniture.txt
C:\tmp\file\gadget.txt
C:\tmp\file\profile.txt
C:\tmp\file\test.ps1

それでは用意されているオプションを試していきます。

-Firstオプション

-First オプションを使用すると、先頭から数えていくつのオブジェクトをパイプを介して渡すのかを制限できます。

Select-Object プロパティ名1, プロパティ名2, ... -First 個数

例えば個数に 5 を指定すると、先頭から 5 つのオブジェクトだけをパイプを介して Select-Object に渡します。

それでは次のように実行してください。

Get-ChildItem c:\tmp\file | Select-Object FullName -First 3

実行結果は次のようになります。

PS C:\code\powershell> Get-ChildItem c:\tmp\file | Select-Object FullName -First 3

FullName
--------
C:\tmp\file\access.back
C:\tmp\file\access.log
C:\tmp\file\address.txt

先頭から 3 つのオブジェクトだけを取得しています。

-Lastオプション

-Last オプションを使用すると、末尾から数えていくつのオブジェクトをパイプを介して渡すのかを制限できます。

Select-Object プロパティ名1, プロパティ名2, ... -Last 個数

例えば個数に 4 を指定すると、末尾から 4 つのオブジェクトだけをパイプを介して Select-Object に渡します。

それでは次のように実行してください。

Get-ChildItem c:\tmp\file | Select-Object FullName -Last 3

実行結果は次のようになります。

PS C:\code\powershell> Get-ChildItem c:\tmp\file | Select-Object FullName -Last 3

FullName
--------
C:\tmp\file\gadget.txt
C:\tmp\file\profile.txt
C:\tmp\file\test.ps1

末尾から 3 つのオブジェクトだけを取得しています。

-Skipオプション

-Skip オプションを使用すると、指定した数のオブジェクトを先頭スキップして、それ以降のオブジェクトだけをパイプを介して渡します。

Select-Object プロパティ名1, プロパティ名2, ... -Skip 個数

例えば個数に 4 を指定すると、先頭から指定した数のオブジェクトを除外し、それ以降のオブジェクトを取得します。

それでは次のように実行してください。

Get-ChildItem c:\tmp\file | Select-Object FullName -Skip 3

実行結果は次のようになります。

PS C:\code\powershell> Get-ChildItem c:\tmp\file | Select-Object FullName -Skip 3

FullName
--------
C:\tmp\file\furniture.txt
C:\tmp\file\gadget.txt
C:\tmp\file\profile.txt
C:\tmp\file\test.ps1

先頭から数えて 4 つ目以降のオブジェクトだけを取得しています。

-SkipLastオプション

-SkipLast オプションを使用すると、指定した数のオブジェクトを末尾からスキップします。それ以外のオブジェクトだけをパイプを介して渡します。(このオプションは PowerShell 7.4 以降で使用できます)。

Select-Object プロパティ名1, プロパティ名2, ... -SkipLast 個数

例えば個数に 4 を指定すると、末尾から指定した数のオブジェクトを除外し、それ以外のオブジェクトを取得します。

それでは次のように実行してください。

Get-ChildItem c:\tmp\file | Select-Object FullName -SkipLast 3

実行結果は次のようになります。

PS C:\code\powershell> Get-ChildItem c:\tmp\file | Select-Object FullName -SkipLast 3

FullName
--------
C:\tmp\file\access.back
C:\tmp\file\access.log
C:\tmp\file\address.txt
C:\tmp\file\furniture.txt

末尾から数えて 4 つのオブジェクト以外のオブジェクトだけを取得しています。

-Indexオプション

-Index オプションを使用すると、指定したインデックスのオブジェクトだけをパイプを介して渡します。インデックスは先頭のオブジェクトが 0 で、複数のインデックスを指定する場合はカンマ(,)で区切って指定します。

Select-Object -Index インデックス1, インデックス2, ...

-Index はオブジェクトの位置で抽出するため、-Property のようなプロパティ選択とは併用できません。

例えばインデックスに 1 を指定すると、先頭から数えて 2 番目のオブジェクトだけをパイプを介して Select-Object に渡します。

それでは次のように実行してください。

Get-ChildItem c:\tmp\file | Select-Object -Index 1, 3 | Select-Object FullName

実行結果は次のようになります。

PS C:\code\powershell> Get-ChildItem c:\tmp\file | Select-Object -Index 1, 3 | Select-Object FullName

FullName
--------
C:\tmp\file\access.log
C:\tmp\file\furniture.txt

先頭から数えて 2 番目と 4 番目のオブジェクトだけを取得し、さらにパイプを介して特定のプロパティだけを取得しています。

重複するプロパティを除外する

-Unique オプションを使用すると、Select-Object で取得した結果の中で、同じ内容のものが複数ある場合に、一つだけを残して重複を除外できます。

Select-Object プロパティ名1, プロパティ名2, ... -Unique

それでは実際に試してみます。最初に -Unique オプションを付けずに、次のようにコマンドを実行してください。

Get-Process | Select-Object Name

実行した結果を見ると、次のように同じ内容のオブジェクトが含まれています。

Select-Objectコマンドレットの使い方(2)

Select-Objectコマンドレットの使い方(3)

次に -Unique オプションを付けて、次のようにコマンドを実行してください。

Get-Process | Select-Object Name -Unique

実行した結果を見ると、同じ内容のオブジェクトが一つを残して除外されていることが確認できます。

Select-Objectコマンドレットの使い方(4)

なお、-Unique は、Select-Object で取得した結果全体を比較して重複を判定します。

プロパティの値だけを取得する

Select-Object では通常、指定したプロパティを持つオブジェクトを取得しますが、 -ExpandProperty オプションを使用すると、プロパティの値だけを直接取得できます。

Select-Object -ExpandProperty プロパティ名

※ 指定できるプロパティは一つだけです。

それでは実際に試してみます。最初に -ExpandProperty オプションを使用せずに、次のように実行してください。

Get-ChildItem c:\tmp\file | Select-Object Name

実行結果は次のようになります。

Select-Objectコマンドレットの使い方(5)

この場合、 Name プロパティを持つオブジェクトとして取得しています。

次に -ExpandProperty オプションを使用して、同じプロパティを取得してみます。

Get-ChildItem c:\tmp\file | Select-Object -ExpandProperty Name

実行結果は次のようになります。

Select-Objectコマンドレットの使い方(6)

今回は Name プロパティを持つオブジェクトではなく、 Name プロパティの値そのものを取得しています。

例えば取得した値をそのまま文字列として処理したい場合や、他のコマンドへ単純な値として渡したい場合に便利です。

配列の要素を展開して取得する

-ExpandProperty オプションで指定したプロパティが配列だった場合は、配列の要素を展開して取得します。

例として Get-Command を使って、 Get-Item コマンドの OutputType プロパティの値を取得してみます。次のように実行してください。

Get-Command Get-Item | Select-Object OutputType

実行結果は次のようになります。

PS C:\code\powershell> Get-Command Get-Item | Select-Object OutputType

OutputType
----------
{System.IO.FileInfo, System.Boolean, System.String, System.IO.FileInfo…}

OutputType プロパティには配列が格納されており、複数の値がまとめて表示されています。

-ExpandProperty オプションで配列の値を持つプロパティを指定すると、配列の各要素を 1 つずつ取得することができます。次のように実行してください。

Get-Command Get-Item | Select-Object -ExpandProperty OutputType

実行結果は次のようになります。

PS C:\code\powershell> Get-Command Get-Item | Select-Object -ExpandProperty OutputType

Name                    Type                    TypeDefinitionAst
----                    ----                    -----------------
System.IO.FileInfo      System.IO.FileInfo
System.Boolean          System.Boolean
System.String           System.String
System.IO.FileInfo      System.IO.FileInfo
System.IO.DirectoryInfo System.IO.DirectoryInfo

配列の各要素が 1 件ずつ展開されて表示されました。

-- --

PowerShell における Select-Object コマンドレットの使い方について解説しました。

( Written by Tatsuo Ikura )

プロフィール画像

著者 / TATSUO IKURA

これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。