次の方法で共有


Select-Object

オブジェクトまたはオブジェクトのプロパティを選択します。

構文

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

説明

Select-Object コマンドレットは、オブジェクトまたはオブジェクトのセットの指定されたプロパティを選択します。 また、一意のオブジェクト、指定した数のオブジェクト、または配列内の指定した位置にあるオブジェクトを選択することもできます。

コレクションからオブジェクトを選択するには、FirstLastUniqueSkip、および index パラメーター 使用します。 オブジェクトのプロパティを選択するには、Property パラメーターを使用します。 プロパティを選択すると、Select-Object は、指定したプロパティのみを持つ新しいオブジェクトを返します。

Windows PowerShell 3.0 以降では、Select-Object には、使用されていないオブジェクトをコマンドで作成および処理できないようにする最適化機能が含まれています。

コマンド パイプラインに Select-Object パラメーターまたは Index パラメーターを含む コマンドを含めると、パイプラインの Select-Object コマンドの前にオブジェクトを生成するコマンドが表示された場合でも、選択した数のオブジェクトが生成されるとすぐにオブジェクトを生成するコマンドが停止されます。 この最適化動作を無効にするには、Wait パラメーターを使用します。

例 1: プロパティでオブジェクトを選択する

このコマンドは、プロセス オブジェクトの NameID、およびワーキング セット (WS) プロパティを持つオブジェクト作成します。

Get-Process | Select-Object -Property ProcessName, Id, WS

例 2: プロパティでオブジェクトを選択し、結果を書式設定する

このコマンドは、コンピューター上のプロセスによって使用されるモジュールに関する情報を取得します。 Get-Process コマンドレットを使用して、コンピューター上のプロセスを取得します。

Select-Object コマンドレットを使用して、[System.Diagnostics.ProcessModule]によって出力される各 インスタンスの System.Diagnostics.Process プロパティに含まれる Get-Process インスタンスの配列を出力します。

このコマンドでは、 コマンドレットの Select-Object パラメーターを使用して、プロセス名を選択します。 これにより、すべての インスタンスに が追加され、ProcessName プロパティ 現在のプロセスの値が設定されます。

このコマンドでは、Format-List コマンドレットを使用して、各プロセスの名前とモジュールを一覧に表示します。

Get-Process Explorer | Select-Object -Property ProcessName -ExpandProperty Modules | Format-List

ProcessName       : explorer
ModuleName        : explorer.exe
FileName          : C:\WINDOWS\explorer.exe
BaseAddress       : 140697278152704
ModuleMemorySize  : 3919872
EntryPointAddress : 140697278841168
FileVersionInfo   : File:             C:\WINDOWS\explorer.exe
                    InternalName:     explorer
                    OriginalFilename: EXPLORER.EXE.MUI
                    FileVersion:      10.0.17134.1 (WinBuild.160101.0800)
                    FileDescription:  Windows Explorer
                    Product:          Microsoft Windows Operating System
                    ProductVersion:   10.0.17134.1
...

例 3: メモリが最も多いプロセスを選択する

このコマンドは、最も多くのメモリを使用している 5 つのプロセスを取得します。 Get-Process コマンドレットは、コンピューター上のプロセスを取得します。 Sort-Object コマンドレットは、メモリ (ワーキング セット) の使用状況に従ってプロセスを並べ替え、Select-Object コマンドレットは、結果のオブジェクト配列の最後の 5 つのメンバーのみを選択します。

はすべてのオブジェクトを処理し、コレクションを返すので、Sort-Object コマンドレットを含むコマンドでは、Sort-Object パラメーターは必要ありません。 Select-Object の最適化は、処理時にオブジェクトを個別に返すコマンドでのみ使用できます。

Get-Process | Sort-Object -Property WS | Select-Object -Last 5

Handles  NPM(K)    PM(K)      WS(K) VS(M)   CPU(s)     Id ProcessName
-------  ------    -----      ----- -----   ------     -- -----------
2866     320       33432      45764   203   222.41   1292 svchost
577      17        23676      50516   265    50.58   4388 WINWORD
826      11        75448      76712   188    19.77   3780 Ps
1367     14        73152      88736   216    61.69    676 Ps
1612     44        66080      92780   380   900.59   6132 INFOPATH

例 4: 配列から一意の文字を選択する

このコマンドは、Select-Object パラメーターを使用して、文字の配列から一意の文字を取得します。

"a","b","c","a","a","a" | Select-Object -Unique

a
b
c

例 5: イベント ログで最新かつ最も古いイベントを選択する

これらのコマンドは、Windows PowerShell イベント ログの最初の (最新の) イベントと最後の (最も古い) イベントを取得します。

このコマンドでは、Get-EventLog コマンドレットを使用して、Windows PowerShell ログ内のすべてのイベントを取得します。 $a 変数に保存されます。

2 番目のコマンドでは、パイプライン演算子 (|) を使用して、$a のイベントを Select-Object コマンドレットに送信します。 Select-Object コマンドは、Index パラメーターを使用して、$a 変数内のイベントの配列からイベントを選択します。 最初のイベントのインデックスは 0 です。 最後のイベントのインデックスは、$a から 1 を引いた項目の数です。

$a = Get-EventLog -LogName "Windows PowerShell"
$a | Select-Object -Index 0, ($A.count - 1)

例 6: 最初のオブジェクト以外をすべて選択する

このコマンドは、最初の PSSession を除き、Servers.txt ファイルに一覧表示されている各コンピューターに新しい PSSession を作成します。

このコマンドでは、Select-Object コマンドレットを使用して、コンピューター名の一覧で最初のコンピューター以外のすべてを選択します。 結果のコンピューターの一覧は、 コマンドレットの New-PSSession パラメーターの値として設定されます。

New-PSSession -ComputerName (Get-Content Servers.txt | Select-Object -Skip 1)

例 7: ファイルの名前を変更し、いくつかのファイルを選択して確認する

このコマンドは、読み取り専用属性を持つテキスト ファイルの基本名に "-ro" サフィックスを追加し、ユーザーが効果のサンプルを見ることができるように最初の 5 つのファイルを表示します。

このコマンドでは、fileSystem コマンドレットの ReadOnly 動的パラメーター Get-ChildItem を使用して、読み取り専用ファイルを取得します。 パイプライン演算子 (|) を使用してファイルを Rename-Item コマンドレットに送信し、ファイルの名前を変更します。 Rename-Item パラメーターを使用して、名前が変更されたファイルを Select-Object コマンドレットに送信します。このコマンドレットでは、表示する最初の 5 つを選択します。

Select-Object パラメーターを使用すると、最初の 5 つの読み取り専用テキスト ファイルを取得した後に、PowerShell が Get-ChildItem コマンドレットを停止できなくなります。 このパラメーターを指定しないと、最初の 5 つの読み取り専用ファイルのみが名前が変更されます。

Get-ChildItem *.txt -ReadOnly | Rename-Item -NewName {$_.BaseName + "-ro.txt"} -PassThru | Select-Object -First 5 -Wait

例 8: -ExpandProperty パラメーターの複雑さを示す

この例では、ExpandProperty パラメーターの複雑さを示します。

生成された出力は、[System.Int32] インスタンスの配列であることに注意してください。 インスタンスは、出力ビューの標準の書式設定規則に準拠しています。 これは、展開された プロパティ 当てはまります。 出力されるオブジェクトに特定の標準形式がある場合、展開されたプロパティが表示されない可能性があります。

# Create a custom object to use for the Select-Object example.
$object = [pscustomobject]@{Name="CustomObject";Expand=@(1,2,3,4,5)}
# Use the ExpandProperty parameter to Expand the property.
$object | Select-Object -ExpandProperty Expand -Property Name

1
2
3
4
5

# The output did not contain the Name property, but it was added successfully.
# Use Get-Member to confirm the Name property was added and populated.
$object | Select-Object -ExpandProperty Expand -Property Name | Get-Member

TypeName: System.Int32

Name        MemberType   Definition
----        ----------   ----------
CompareTo   Method       int CompareTo(System.Object value), int CompareTo(int value), int IComparable.CompareTo(System.Object obj)...
Equals      Method       bool Equals(System.Object obj), bool Equals(int obj), bool IEquatable[int].Equals(int other)
GetHashCode Method       int GetHashCode()
GetType     Method       type GetType()
GetTypeCode Method       System.TypeCode GetTypeCode(), System.TypeCode IConvertible.GetTypeCode()
ToBoolean   Method       bool IConvertible.ToBoolean(System.IFormatProvider provider)
ToByte      Method       byte IConvertible.ToByte(System.IFormatProvider provider)
ToChar      Method       char IConvertible.ToChar(System.IFormatProvider provider)
ToDateTime  Method       datetime IConvertible.ToDateTime(System.IFormatProvider provider)
ToDecimal   Method       decimal IConvertible.ToDecimal(System.IFormatProvider provider)
ToDouble    Method       double IConvertible.ToDouble(System.IFormatProvider provider)
ToInt16     Method       int16 IConvertible.ToInt16(System.IFormatProvider provider)
ToInt32     Method       int IConvertible.ToInt32(System.IFormatProvider provider)
ToInt64     Method       long IConvertible.ToInt64(System.IFormatProvider provider)
ToSByte     Method       sbyte IConvertible.ToSByte(System.IFormatProvider provider)
ToSingle    Method       float IConvertible.ToSingle(System.IFormatProvider provider)
ToString    Method       string ToString(), string ToString(string format), string ToString(System.IFormatProvider provider)...
ToType      Method       System.Object IConvertible.ToType(type conversionType, System.IFormatProvider provider)
ToUInt16    Method       uint16 IConvertible.ToUInt16(System.IFormatProvider provider)
ToUInt32    Method       uint32 IConvertible.ToUInt32(System.IFormatProvider provider)
ToUInt64    Method       uint64 IConvertible.ToUInt64(System.IFormatProvider provider)
Name        NoteProperty string Name=CustomObject

例 9: オブジェクトにカスタム プロパティを作成する

次の例では、Select-Object を使用して任意のオブジェクトにカスタム プロパティを追加する方法を示します。 存在しないプロパティ名を指定すると、渡 Select-Object 各オブジェクトに NoteProperty としてそのプロパティが作成されます。

$customObject = 1 | Select-Object -Property MyCustomProperty
$customObject.MyCustomProperty = "New Custom Property"
$customObject

MyCustomProperty
----------------
New Custom Property

例 10: 各 InputObject の計算プロパティを作成する

この例では、Select-Object を使用して計算プロパティを入力に追加する方法を示します。 ScriptBlockProperty パラメーターに渡すと、Select-Object は渡された各オブジェクトの式を評価し、結果を出力に追加します。 ScriptBlock内では、$_ 変数を使用してパイプライン内の現在のオブジェクトを参照できます。

既定では、Select-Object はプロパティの名前として ScriptBlock 文字列を使用します。 Hashtableを使用すると、ScriptBlock の出力に、各オブジェクトに追加されたカスタム プロパティとしてラベルを付けることができます。 Select-Objectに渡される各オブジェクトに、複数の計算プロパティを追加できます。

# Create a calculated property called $_.StartTime.DayOfWeek
Get-Process | Select-Object -Property ProcessName,{$_.StartTime.DayOfWeek}

ProcessName  $_.StartTime.DayOfWeek
----         ----------------------
alg                       Wednesday
ati2evxx                  Wednesday
ati2evxx                   Thursday
...

# Add a custom property to calculate the size in KiloBytes of each FileInfo object you pass in.
# Use the pipeline variable to divide each file's length by 1 KiloBytes
$size = @{label="Size(KB)";expression={$_.length/1KB}}
# Create an additional calculated property with the number of Days since the file was last accessed.
# You can also shorten the key names to be 'l', and 'e', or use Name instead of Label.
$days = @{l="Days";e={((Get-Date) - $_.LastAccessTime).Days}}
# You can also shorten the name of your label key to 'l' and your expression key to 'e'.
Get-ChildItem $PSHOME -File | Select-Object Name, $size, $days

Name                        Size(KB)        Days
----                        --------        ----
Certificate.format.ps1xml   12.5244140625   223
Diagnostics.Format.ps1xml   4.955078125     223
DotNetTypes.format.ps1xml   134.9833984375  223

パラメーター

-ExcludeProperty

このコマンドレットが操作から除外するプロパティを指定します。 ワイルドカードを使用できます。 このパラメーターは、コマンドに Property パラメーターも含まれている場合にのみ有効です。

型:String[]
配置:Named
規定値:None
必須:False
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:True

-ExpandProperty

選択するプロパティを指定し、そのプロパティの展開を試みる必要があることを示します。

  • 指定したプロパティが配列の場合、配列の各値が出力に含まれます。
  • 指定したプロパティがオブジェクトの場合、InputObject ごとにオブジェクト のプロパティが展開されます。

いずれの場合も、オブジェクト出力の Type は、展開されたプロパティの Type と一致します。

Property パラメーターを指定 Select-Object、選択した各プロパティを NoteProperty として出力されるすべてのオブジェクトに追加しようとします。

警告

エラーが発生した場合: Select: Property cannot be processed because property <PropertyName> already exists, consider the following. -ExpandPropertyを使用する場合、Select-Object は既存のプロパティを置き換えできません。 これはですね:

  • 展開されたオブジェクトに同じ名前のプロパティがある場合は、エラーが発生します。
  • Selected オブジェクトに、展開された オブジェクト プロパティと同じ名前のプロパティがある場合は、エラーが発生します。
型:String
配置:Named
規定値:None
必須:False
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:False

-First

入力オブジェクトの配列の先頭から選択するオブジェクトの数を指定します。

型:Int32
配置:Named
規定値:None
必須:False
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:False

-Index

インデックス値に基づいて配列からオブジェクトを選択します。 コンマ区切りのリストにインデックスを入力します。

配列内のインデックスは 0 で始まり、0 は最初の値を表し、(n-1) は最後の値を表します。

型:Int32[]
配置:Named
規定値:None
必須:False
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:False

-InputObject

パイプラインを介してコマンドレットに送信するオブジェクトを指定します。 このパラメーターを使用すると、オブジェクトをパイプ処理して Select-Objectできます。

パイプラインを使用する代わりに、InputObject パラメーターにオブジェクトを渡す場合、Select-Object は、値がコレクションであっても、InputObject を 1 つのオブジェクトとして扱います。 コレクションを Select-Objectに渡すときは、パイプラインを使用することをお勧めします。

型:PSObject
配置:Named
規定値:None
必須:False
パイプライン入力を受け取る:True
ワイルドカード文字を受け取る:False

-Last

入力オブジェクトの配列の末尾から選択するオブジェクトの数を指定します。

型:Int32
配置:Named
規定値:None
必須:False
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:False

-Property

選択するプロパティを指定します。 これらのプロパティは、NoteProperty メンバー 出力オブジェクトに追加されます。 ワイルドカードを使用できます。

Property パラメーターの値には、新しい計算プロパティを指定できます。 計算されたプロパティを作成するには、ハッシュ テーブルを使用します。 有効なキーは次のとおりです。

  • 名前 (またはラベル): <string>
  • 式の <string> または <script block>
型:Object[]
配置:0
規定値:None
必須:False
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:True

-Skip

指定した数の項目をスキップ (選択しません) します。 既定では、Skip パラメーターは、配列またはオブジェクトのリストの先頭からカウントされますが、コマンドで Last パラメーターを使用する場合は、リストまたは配列の末尾からカウントされます。

カウントを 0 から開始する Index パラメーターとは異なり、Skip パラメーターは 1 から始まります。

型:Int32
配置:Named
規定値:None
必須:False
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:False

-SkipLast

リストまたは配列の末尾から指定した数の項目をスキップ (選択しません) します。 Skip を Last パラメーターと共 使用するのと同じ方法で動作します。

0 からカウントを開始する Index パラメーターとは異なり、SkipLast パラメーターは 1 から始まります。

型:Int32
配置:Named
規定値:None
必須:False
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:False

-Unique

入力オブジェクトのサブセットに同じプロパティと値がある場合、そのサブセットの 1 つのメンバーのみが選択されるように指定します。

このパラメーターでは、大文字と小文字が区別されます。 その結果、文字の大文字と小文字のみが異なる文字列は一意と見なされます。

型:SwitchParameter
配置:Named
規定値:None
必須:False
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:False

-Wait

コマンドレットが最適化をオフにすることを示します。 PowerShell は、コマンド パイプラインに表示される順序でコマンドを実行し、すべてのオブジェクトを生成できるようにします。 既定では、コマンド パイプラインに Select-Object パラメーターまたは Index パラメーターを含む コマンドを含める場合、選択した数のオブジェクトが生成されるとすぐに、PowerShell によってオブジェクトが生成されるコマンドが停止されます。

このパラメーターは、Windows PowerShell 3.0 で導入されました。

型:SwitchParameter
配置:Named
規定値:None
必須:False
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:False

入力

PSObject

任意のオブジェクトをパイプ処理して Select-Objectできます。

出力

PSObject

メモ

  • 組み込みのエイリアスである Select-Objectで、select コマンドレットを参照することもできます。 詳細については、about_Aliasesを参照してください。
  • Select-Object の最適化機能は、処理時にパイプラインにオブジェクトを書き込むコマンドでのみ使用できます。 処理されたオブジェクトをバッファー処理してコレクションとして書き込むコマンドには影響しません。 オブジェクトをすぐに書き込むのは、コマンドレット設計のベスト プラクティスです。 詳細については、MSDN ライブラリの「強く推奨される開発ガイドライン」 の「単一レコードをパイプラインに書き込む」を参照してください。