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
、オブジェクトまたはオブジェクトのセットの指定されたプロパティを選択します。
加えて、配列内の一意のオブジェクト、指定された数のオブジェクト、または指定された位置にあるオブジェクトを選択することもできます。
コレクションからオブジェクトを選択するには、First、Last、Unique、Skip、および Index パラメーターを使用します。 オブジェクトのプロパティを選択するには、Property パラメーターを使用します。
プロパティを選択すると、 Select-Object
指定されたプロパティのみを持つ新しいオブジェクトが返されます。
Windows PowerShell 3.0 以降では、 には、Select-Object
コマンドが使用されていないオブジェクトを作成および処理できないようにする最適化機能が含まれています。
コマンド パイプラインに First パラメーターまたは Index パラメーターを含むコマンドを含Select-Object
めると、パイプライン内のコマンドの前Select-Object
にオブジェクトを生成するコマンドが表示された場合でも、選択した数のオブジェクトが生成されるとすぐに、PowerShell はオブジェクトを生成するコマンドを停止します。
この最適化動作を無効にするには、Wait パラメーターを使用します。
例
例 1: プロパティでオブジェクトを選択する
このコマンドは、プロセス オブジェクトの Name、 ID、およびワーキング セット (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
使用してプロセス名を選択します。 これにより、 がすべての[System.Diagnostics.ProcessModule]
インスタンスに追加ProcessName
NoteProperty
され、現在の process 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: イベント ログで最新かつ最も古いイベントを選択する
これらのコマンドは、Windows PowerShell イベント ログ内の最初の (最新) イベントと最後 (最も古い) イベントを取得します。
コマンドは コマンドレットをGet-EventLog
使用して、Windows PowerShell ログ内のすべてのイベントを取得します。
変数に $a
保存します。
2 番目のコマンドでは、パイプライン演算子 (|) を使用して、 コマンドレットに $a
イベントを Select-Object
送信します。
コマンドは Select-Object
Index パラメーターを使用して、変数内のイベントの配列からイベントを $a
選択します。 最初のイベントのインデックスは 0 です。
最後のイベントのインデックスは、マイナス 1 の $a
項目数です。
$a = Get-EventLog -LogName "Windows PowerShell"
$a | Select-Object -Index 0, ($A.count - 1)
例 6: 最初のオブジェクト以外をすべて選択する
このコマンドは、Servers.txt ファイルにリストアップされたコンピューターのうち 1 つ目のコンピューターを除くそれぞれのコンピューターで、新しい PSSession を作成します。
このコマンドでは、 コマンドレットを Select-Object
使用して、コンピューター名の一覧で最初のコンピューター以外のすべてを選択します。
結果として得られるコンピューターの一覧は、 コマンドレットの ComputerName パラメーターの値として設定されます New-PSSession
。
New-PSSession -ComputerName (Get-Content Servers.txt | Select-Object -Skip 1)
例 7: ファイルの名前を変更し、いくつかのファイルを選択して確認する
このコマンドは、読み取り専用属性を持つテキスト ファイルのベース名にサフィックス "-ro" を追加した後、その効果を確認できるように最初の 5 つのファイルを表示します。
コマンドは、for FileSystem コマンドレットの ReadOnly 動的パラメーターを Get-ChildItem
使用して、読み取り専用ファイルを取得します。
パイプライン演算子 (|) を使用して、ファイルの名前を変更するコマンドレットに 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
例 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: オブジェクトのカスタム プロパティをCreateする
次の例では、 を使用して Select-Object
任意のオブジェクトにカスタム プロパティを追加する方法を示します。
存在しないプロパティ名を指定すると、 Select-Object
渡された各オブジェクトに 対して NoteProperty としてそのプロパティが作成されます。
$customObject = 1 | Select-Object -Property MyCustomProperty
$customObject.MyCustomProperty = "New Custom Property"
$customObject
MyCustomProperty
----------------
New Custom Property
例 10: 各 InputObject の計算プロパティをCreateする
この例では、 を使用して Select-Object
計算プロパティを入力に追加する方法を示します。
Property パラメーターSelect-Object
に ScriptBlock を渡すと、渡された各オブジェクトの式が評価され、結果が出力に追加されます。 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 パラメーターが含まれている場合にのみ有効です。
Type: | String[] |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | True |
-ExpandProperty
選択するプロパティを指定し、そのプロパティの展開を試みることを示します。
- 指定したプロパティが配列の場合、配列の各値が出力に含まれます。
- 指定したプロパティが オブジェクトの場合、すべての InputObject のオブジェクト プロパティが展開されます
どちらの場合も、オブジェクトの 種類 の出力は、展開されたプロパティの Type と一致します。
Property パラメーターが指定されている場合、 は、Select-Object
選択した各プロパティを NoteProperty として出力されるすべてのオブジェクトに追加しようとします。
警告
"Select : Property cannot be processed because property <PropertyName>
already exists, consider the following.
を使用-ExpandProperty
Select-Object
する場合は、既存のプロパティを置き換えできません。
これは、以下のようなことを意味します。
- 展開されたオブジェクトに同じ名前のプロパティがある場合は、エラーが発生します。
- Selected オブジェクトに Expanded objects プロパティと同じ名前のプロパティがある場合は、エラーが発生します。
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 メンバーとして出力オブジェクトに追加されます。 ワイルドカードを使用できます。
Property パラメーターの値には、新しい計算プロパティを指定できます。 集計プロパティを作成するには、ハッシュ テーブルを使用します。 有効なキーは次のとおりです。
- 名前 (またはラベル):
<string>
- 式
<string>
または<script block>
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 |
-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 |
入力
任意のオブジェクトを に Select-Object
パイプできます。
出力
メモ
- コマンドレットは、組み込みのエイリアス
select
で参照Select-Object
することもできます。 詳細については、「about_Aliases」を参照してください。 - の
Select-Object
最適化機能は、処理時にパイプラインにオブジェクトを書き込むコマンドでのみ使用できます。 処理したオブジェクトをバッファーに格納してコレクションとして書き込むコマンドには作用しません。 オブジェクトをすぐに書き込むのは、コマンドレットのデザイン上のベスト プラクティスです。 詳細については、MSDN ライブラリの「 厳密に推奨される開発ガイドライン 」の「パイプラインへの単一レコードの書き込み」を参照してください。