次の方法で共有


Select-Object

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

構文

Select-Object
      [[-Property] <Object[]>]
      [-InputObject <psobject>]
      [-ExcludeProperty <string[]>]
      [-ExpandProperty <string>]
      [-Unique]
      [-Last <int>]
      [-First <int>]
      [-Skip <int>]
      [-Wait]
      [<CommonParameters>]
Select-Object
      [[-Property] <Object[]>]
      [-InputObject <psobject>]
      [-ExcludeProperty <string[]>]
      [-ExpandProperty <string>]
      [-Unique]
      [-SkipLast <int>]
      [<CommonParameters>]
Select-Object
      [-InputObject <psobject>]
      [-Unique]
      [-Wait]
      [-Index <int[]>]
      [<CommonParameters>]
Select-Object
      [-InputObject <psobject>]
      [-Unique]
      [-SkipIndex <int[]>]
      [<CommonParameters>]

説明

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

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

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

コマンド パイプラインで First パラメーターまたは Index パラメーターと共に を使用Select-Objectすると、PowerShell は、選択した数のオブジェクトに達するとすぐにオブジェクトを生成するコマンドを停止します。 この最適化動作を無効にするには、Wait パラメーターを使用します。

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

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

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

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

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

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

コマンドレットの Property パラメーターは、 Select-Object プロセス名を選択します。 これにより、ProcessNameすべての[System.Diagnostics.ProcessModule]インスタンスに NoteProperty が追加され、現在のプロセスの 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 つのメンバーのみを選択します。

Wait パラメーターは、 コマンドレットを含むコマンドでは必要ありません。これは、すべてのオブジェクトを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 Unique パラメーターを使用して、文字の配列から一意の文字を取得します。

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

a
b
c

例 5: 他のパラメーターで '-Unique' を使用する

Unique パラメーターは、他Select-Objectのパラメーターが適用された後に値をフィルター処理します。 たとえば、 First パラメーターを使用して配列内の項目の最初の数を選択した場合、 Unique は選択した値にのみ適用され、配列全体には適用されません。

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

a

この例では、 First"a","a" 配列内の最初の 2 つの項目として を選択します。 Unique は に "a","a" 適用され、一意の値として を返します a

例 6: イベント ログで最も新しいイベントと最も古いイベントを選択する

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

Get-WinEventは、Windows PowerShell ログ内のすべてのイベントを取得し、変数に$a保存します。 次に、 $a が コマンドレットに Select-Object パイプされます。 コマンドは Select-ObjectIndex パラメーターを使用して、変数内のイベントの配列からイベントを $a 選択します。 最初のイベントのインデックスは 0 です。 最後のイベントのインデックスは、マイナス 1 の $a 項目数です。

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

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

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

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

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

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

次の使用例は、読み取り専用属性を持つテキスト ファイルのベース名に "-ro" サフィックスを追加し、最初の 5 つのファイルを表示して、効果のサンプルを表示できるようにします。

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

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

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

例 9: -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), ...
Equals      Method       bool Equals(System.Object obj), bool Equals(int obj), bool IEq...
GetHashCode Method       int GetHashCode()
GetType     Method       type GetType()
GetTypeCode Method       System.TypeCode GetTypeCode(), System.TypeCode IConvertible.Ge...
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 ToS...
ToType      Method       System.Object IConvertible.ToType(type conversionType, System...
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

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

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

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

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

例 11: 各 InputObject の計算プロパティをCreateする

この例では、 を使用して Select-Object 計算プロパティを入力に追加する方法を示します。 Property パラメーターSelect-ObjectScriptBlock を渡すと、渡された各オブジェクトの式が評価され、結果が出力に追加されます。 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

例 12: 計算プロパティを使用せずにハッシュテーブル キーを選択する

PowerShell 6 以降では、 Select-Objectハッシュテーブル 入力のキーをプロパティとして選択できます。 次の例では、 weight 入力ハッシュテーブルの キーと name キーを選択し、出力を表示します。

@{ name = 'a' ; weight = 7 } | Select-Object -Property name, weight

name weight
---- ------
a         7

パラメーター

-ExcludeProperty

このコマンドレットが操作から除外するプロパティを指定します。 ワイルドカードを使用できます。

PowerShell 6 以降では、ExcludeProperty を機能させるために Property パラメーターを含める必要はなくなりました。

Type:String[]
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:True

-ExpandProperty

選択するプロパティを指定し、そのプロパティの展開を試みることを示します。 入力オブジェクト パイプラインに という名前の プロパティがない場合は、 Select-Object エラーを返します。

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

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

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

警告

その名前のプロパティが既に存在するため、プロパティを処理できないというエラーが表示される場合は、次の点を考慮してください。 ExpandProperty を使用する場合、Select-Object既存のプロパティを置き換えることはできません。 これは、以下のようなことを意味します。

  • 展開されたオブジェクトに同じ名前のプロパティがある場合、コマンドはエラーを返します。
  • Selected オブジェクトに Expanded オブジェクトの プロパティと同じ名前のプロパティがある場合、コマンドはエラーを返します。
Type:String
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-First

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

Type:Int32
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Index

インデックス値に基づいて配列からオブジェクトを選択します。 インデックスをコンマ区切りリスト形式で入力します。 配列内インデックスは 0 で始まります。0 は最初の値を表し、(n-1) は最後の値を表します。

Type:Int32[]
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-InputObject

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

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

Type:PSObject
Position:Named
Default value:None
Required:False
Accept pipeline input:True
Accept wildcard characters:False

-Last

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

Type:Int32
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Property

選択するプロパティを指定します。 これらのプロパティは、 NoteProperty メンバーとして出力オブジェクトに追加されます。 ワイルドカードを使用できます。 入力オブジェクトに という名前のプロパティがない場合、新しい NoteProperty の値は に $null設定されます。

Property パラメーターの値には、新しい計算プロパティを指定できます。 集計プロパティを作成するには、ハッシュ テーブルを使用します。

有効なキーは次のとおりです。

  • 名前 (またはラベル) - <string>
  • 式 - <string> または <script block>

詳細については、「 about_Calculated_Properties」を参照してください。

Type:Object[]
Position:0
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:True

-Skip

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

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

Type:Int32
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-SkipIndex

インデックス値に基づいて、配列からオブジェクトをスキップ (選択しない) します。 インデックスをコンマ区切りリスト形式で入力します。 配列内インデックスは 0 で始まります。0 は最初の値を表し、(n-1) は最後の値を表します。

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

Type:Int32[]
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-SkipLast

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

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

Type:Int32
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Unique

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

[一意] は、他のフィルター パラメーターが適用された に値を選択します。

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

Type:SwitchParameter
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Wait

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

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

Type:SwitchParameter
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

入力

PSObject

オブジェクトをこのコマンドレットにパイプできます。

出力

PSObject

このコマンドレットは、選択したプロパティのみを含む入力オブジェクトを返します。

メモ

PowerShell には、 の次のエイリアスが Select-Object含まれています。

  • すべてのプラットフォーム:
    • select

の最適化機能 Select-Object は、処理時にパイプラインにオブジェクトを書き込むコマンドでのみ使用できます。 処理したオブジェクトをバッファーに格納してコレクションとして書き込むコマンドには作用しません。 オブジェクトをすぐに書き込むのは、コマンドレットのデザイン上のベスト プラクティスです。 詳細については、「厳密に推奨される開発ガイドライン」の「パイプラインへの単一レコードの書き込み」を参照してください。