Select-Object

Memilih objek atau properti objek.

Sintaks

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>]

Deskripsi

Select-Object Cmdlet memilih properti objek atau sekumpulan objek yang ditentukan. Ini juga dapat memilih objek unik, jumlah objek tertentu, atau objek dalam posisi tertentu dalam array.

Untuk memilih objek dari koleksi, gunakan parameter Pertama, Terakhir, Unik, Lewati, dan Indeks. Untuk memilih properti objek, gunakan parameter Properti . Saat Anda memilih properti, Select-Object mengembalikan objek baru yang hanya memiliki properti yang ditentukan.

Dimulai di Windows PowerShell 3.0, Select-Object menyertakan fitur pengoptimalan yang mencegah perintah membuat dan memproses objek yang tidak digunakan.

Saat Anda menggunakan Select-Object dengan parameter Pertama atau Indeks dalam alur perintah, PowerShell menghentikan perintah yang menghasilkan objek segera setelah jumlah objek yang dipilih tercapai. Untuk menonaktifkan perilaku pengoptimalan ini, gunakan parameter Tunggu .

Contoh

Contoh 1: Pilih objek menurut properti

Contoh ini membuat objek yang memiliki properti Nama, ID, dan set kerja (WS) objek proses.

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

Contoh 2: Pilih objek menurut properti dan format hasilnya

Contoh ini mendapatkan informasi tentang modul yang digunakan oleh proses di komputer. Ini menggunakan Get-Process cmdlet untuk mendapatkan proses di komputer.

Ini menggunakan Select-Object cmdlet untuk menghasilkan array [System.Diagnostics.ProcessModule] instans seperti yang terkandung dalam properti Modul dari setiap System.Diagnostics.Process output instans oleh Get-Process.

Parameter Properti cmdlet Select-Object memilih nama proses. Ini menambahkan NoteProperty ke setiap [System.Diagnostics.ProcessModule] instansProcessName dan mengisinya dengan nilai properti ProcessName proses saat ini.

Akhirnya, Format-List cmdlet digunakan untuk menampilkan nama dan modul setiap proses dalam daftar.

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
...

Contoh 3: Pilih proses menggunakan memori terbanyak

Contoh ini mendapatkan lima proses yang menggunakan memori terbanyak. Get-Process Cmdlet mendapatkan proses di komputer. Sort-Object Cmdlet mengurutkan proses sesuai dengan penggunaan memori (set kerja), dan Select-Object cmdlet hanya memilih lima anggota terakhir dari array objek yang dihasilkan.

Parameter Tunggu tidak diperlukan dalam perintah yang menyertakan Sort-Object cmdlet karena Sort-Object memproses semua objek lalu mengembalikan koleksi. Pengoptimalan Select-Object hanya tersedia untuk perintah yang mengembalikan objek satu per satu saat diproses.

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

Contoh 4: Pilih karakter unik dari array

Contoh ini menggunakan parameter Select-Object Unik untuk mendapatkan karakter unik dari array karakter.

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

a
b
c

Contoh 5: Menggunakan '-Unik' dengan parameter lain

Parameter Unik memfilter nilai setelah parameter lain Select-Object diterapkan. Misalnya, jika Anda menggunakan parameter Pertama untuk memilih jumlah item pertama dalam array, Unik hanya diterapkan ke nilai yang dipilih dan bukan seluruh array.

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

a

Dalam contoh ini, Pertama-tama pilih "a","a" sebagai 2 item pertama dalam array. Unik diterapkan ke "a","a" dan dikembalikan a sebagai nilai unik.

Contoh 6: Pilih peristiwa terbaru dan terlama di log peristiwa

Contoh ini mendapatkan peristiwa pertama (terbaru) dan terakhir (terlama) di log peristiwa Windows PowerShell.

Get-WinEvent mendapatkan semua peristiwa di log Windows PowerShell dan menyimpannya dalam $a variabel. Kemudian, $a disalurkan ke Select-Object cmdlet. Perintah Select-Object menggunakan parameter Indeks untuk memilih peristiwa dari array peristiwa dalam $a variabel. Indeks peristiwa pertama adalah 0. Indeks peristiwa terakhir adalah jumlah item dalam $a minus 1.

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

Contoh 7: Pilih semua kecuali objek pertama

Contoh ini membuat PSSession baru pada setiap komputer yang tercantum dalam file Servers.txt, kecuali yang pertama.

Select-Object memilih semua kecuali komputer pertama dalam daftar nama komputer. Daftar komputer yang dihasilkan ditetapkan sebagai nilai parameter ComputerName cmdlet New-PSSession .

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

Contoh 8: Ganti nama file dan pilih beberapa untuk ditinjau

Contoh ini menambahkan akhiran "-ro" ke nama dasar file teks yang memiliki atribut baca-saja lalu menampilkan lima file pertama sehingga pengguna dapat melihat sampel efeknya.

Get-ChildItemmenggunakan parameter dinamis ReadOnly untuk mendapatkan file baca-saja. File yang dihasilkan disalurkan ke Rename-Item cmdlet, yang mengganti nama file. Ini menggunakan parameter PassThru dari Rename-Item untuk mengirim file yang diganti namanya ke Select-Object cmdlet, yang memilih 5 pertama untuk ditampilkan.

Parameter Select-Object Tunggu mencegah PowerShell menghentikan Get-ChildItem cmdlet setelah mendapatkan lima file teks baca-saja pertama. Tanpa parameter ini, hanya lima file baca-saja pertama yang akan diganti namanya.

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

Contoh 9: Menampilkan selisih parameter -ExpandProperty

Contoh ini menunjukkan selisih parameter ExpandProperty .

Perhatikan bahwa output yang dihasilkan adalah array [System.Int32] instans. Instans sesuai dengan aturan pemformatan standar dari Tampilan Output. Ini berlaku untuk properti Diperluas apa pun. Jika objek yang dihasilkan memiliki format standar tertentu, properti yang diperluas mungkin tidak terlihat.

# 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

Contoh 10: Membuat properti kustom pada objek

Contoh berikut menunjukkan penggunaan Select-Object untuk menambahkan properti kustom ke objek apa pun. Saat Anda menentukan nama properti yang tidak ada, Select-Object membuat properti tersebut sebagai NoteProperty pada setiap objek yang diteruskan.

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

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

Contoh 11: Membuat properti terhitung untuk setiap InputObject

Contoh ini menunjukkan penggunaan Select-Object untuk menambahkan properti terhitung ke input Anda. Meneruskan ScriptBlock ke parameter Properti menyebabkan Select-Object evaluasi ekspresi pada setiap objek yang diteruskan dan menambahkan hasilnya ke output. Dalam ScriptBlock, Anda dapat menggunakan $_ variabel untuk mereferensikan objek saat ini dalam alur.

Secara default, Select-Object menggunakan string ScriptBlock sebagai nama properti. Dengan menggunakan Hashtable, Anda dapat memberi label output ScriptBlock Anda sebagai properti kustom yang ditambahkan ke setiap objek. Anda dapat menambahkan beberapa properti terhitung ke setiap objek yang diteruskan ke 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

Contoh 12: Pilih kunci hashtable tanpa menggunakan properti terhitung

Dimulai di PowerShell 6, Select-Object mendukung pemilihan kunci input hashtable sebagai properti. Contoh berikut memilih weight kunci dan name pada hashtable input dan menampilkan output.

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

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

Parameter

-ExcludeProperty

Menentukan properti yang dikecualikan cmdlet ini dari operasi. Kartubebas diizinkan.

Dimulai di PowerShell 6, tidak lagi diperlukan untuk menyertakan parameter Properti agar ExcludeProperty berfungsi.

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

-ExpandProperty

Menentukan properti yang akan dipilih, dan menunjukkan bahwa upaya harus dilakukan untuk memperluas properti tersebut. Jika alur objek input tidak memiliki properti bernama, Select-Object mengembalikan kesalahan.

  • Jika properti yang ditentukan adalah array, setiap nilai array disertakan dalam output.
  • Jika properti yang ditentukan adalah objek, properti objek diperluas untuk setiap InputObject

Dalam kedua kasus, Jenis objek output cocok dengan Jenis properti yang diperluas.

Jika parameter Properti ditentukan, Select-Object upaya untuk menambahkan setiap properti yang dipilih sebagai NoteProperty ke setiap objek yang dihasilkan.

Peringatan

Jika Anda menerima kesalahan bahwa properti tidak dapat diproses karena properti dengan nama tersebut sudah ada, pertimbangkan hal berikut. Perhatikan bahwa saat menggunakan ExpandProperty, Select-Object tidak dapat menggantikan properti yang ada. Ini berarti:

  • Jika objek yang diperluas memiliki properti dengan nama yang sama, perintah mengembalikan kesalahan.
  • Jika objek Dipilih memiliki properti dengan nama yang sama dengan properti Objek yang diperluas, perintah mengembalikan kesalahan.
Type:String
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-First

Menentukan jumlah objek yang akan dipilih dari awal array objek input.

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

-Index

Memilih objek dari array berdasarkan nilai indeksnya. Masukkan indeks dalam daftar yang dipisahkan koma. Indeks dalam array dimulai dengan 0, di mana 0 mewakili nilai pertama dan (n-1) mewakili nilai terakhir.

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

-InputObject

Menentukan objek yang akan dikirim ke cmdlet melalui alur. Parameter ini memungkinkan Anda untuk menyalurkan objek ke Select-Object.

Saat Anda meneruskan objek ke parameter InputObject , alih-alih menggunakan alur, Select-Object memperlakukan InputObject sebagai objek tunggal, bahkan jika nilainya adalah koleksi. Disarankan agar Anda menggunakan alur saat meneruskan koleksi ke Select-Object.

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

-Last

Menentukan jumlah objek yang akan dipilih dari akhir array objek input.

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

-Property

Menentukan properti yang akan dipilih. Properti ini ditambahkan sebagai anggota NoteProperty ke objek output. Kartubebas diizinkan. Jika objek input tidak memiliki properti bernama, nilai NoteProperty baru diatur ke $null.

Nilai parameter Properti dapat menjadi properti terhitung baru. Untuk membuat properti terhitung, gunakan tabel hash.

Kunci yang valid adalah:

  • Nama (atau Label) - <string>
  • Ekspresi - <string> atau <script block>

Untuk informasi selengkapnya, lihat about_Calculated_Properties.

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

-Skip

Lewati (tidak memilih) jumlah item yang ditentukan. Secara default, parameter Lewati dihitung dari awal kumpulan objek. Jika perintah menggunakan parameter Terakhir , itu dihitung dari akhir koleksi.

Tidak seperti parameter Indeks, yang mulai dihitung pada 0, parameter Lewati dimulai pada 1.

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

-SkipIndex

Melompati (tidak memilih) objek dari array berdasarkan nilai indeksnya. Masukkan indeks dalam daftar yang dipisahkan koma. Indeks dalam array dimulai dengan 0, di mana 0 mewakili nilai pertama dan (n-1) mewakili nilai terakhir.

Parameter ini diperkenalkan di Windows PowerShell 6.0.

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

-SkipLast

Melompati (tidak memilih) jumlah item yang ditentukan dari akhir daftar atau array. Bekerja dengan cara yang sama seperti menggunakan Lewati bersama dengan Parameter terakhir .

Tidak seperti parameter Indeks, yang mulai dihitung pada 0, parameter SkipLast dimulai pada 1.

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

-Unique

Menentukan bahwa jika subset objek input memiliki properti dan nilai yang identik, hanya satu anggota subset yang harus dipilih.

Unik memilih nilai setelah parameter pemfilteran lainnya diterapkan.

Parameter ini peka huruf besar/kecil. Akibatnya, string yang hanya berbeda dalam casing karakter dianggap unik.

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

-Wait

Menunjukkan bahwa cmdlet menonaktifkan pengoptimalan. PowerShell menjalankan perintah dalam urutan muncul di alur perintah dan memungkinkan mereka menghasilkan semua objek. Secara default, jika Anda menyertakan Select-Object perintah dengan parameter Pertama atau Indeks dalam alur perintah, PowerShell menghentikan perintah yang menghasilkan objek segera setelah jumlah objek yang dipilih dihasilkan.

Parameter ini diperkenalkan di Windows PowerShell 3.0.

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

Input

PSObject

Anda dapat menyalurkan objek ke cmdlet ini.

Output

PSObject

Cmdlet ini mengembalikan objek input hanya dengan properti yang dipilih.

Catatan

PowerShell menyertakan alias berikut untuk Select-Object:

  • Semua platform:
    • select

Fitur pengoptimalan Select-Object hanya tersedia untuk perintah yang menulis objek ke alur saat diproses. Ini tidak berpengaruh pada perintah yang diproses buffer objek dan menulisnya sebagai koleksi. Menulis objek segera adalah praktik terbaik desain cmdlet. Untuk informasi selengkapnya, lihat Menulis Catatan Tunggal ke Alur dalam Panduan Pengembangan yang Sangat Didorong.