Select-Object

Memilih objek atau properti objek.

Sintaks

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
      [-InputObject <PSObject>]
      [-Unique]
      [-SkipIndex <Int32[]>]
      [<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 pada Windows PowerShell 3.0, Select-Object menyertakan fitur pengoptimalan yang mencegah perintah membuat dan memproses objek yang tidak digunakan.

Saat 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, bahkan ketika perintah yang menghasilkan objek muncul sebelum Select-Object perintah dalam alur. 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] instans ProcessName dan mengisinya dengan nilai properti ProcessName proses saat ini.

Terakhir, 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-ObjectUnik untuk mendapatkan karakter unik dari array karakter.

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

a
b
c

Contoh 5: Menggunakan '-Unique' 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"a","a" memilih 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-EventLogmendapatkan semua peristiwa dalam log Windows PowerShell dan menyimpannya dalam $a variabel. Kemudian, $a disalurkan ke Select-Object cmdlet. Select-Object Perintah 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-EventLog -LogName "Windows PowerShell"
$a | Select-Object -Index 0, ($A.count - 1)

Contoh 7: Pilih semua kecuali objek pertama

Contoh ini membuat PSSession baru di 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-ChildItem menggunakan parameter dinamis ReadOnly untuk mendapatkan file baca-saja. File yang dihasilkan disalurkan ke Rename-Item cmdlet, yang mengganti nama file. Ini menggunakan parameter Rename-ItemPassthru untuk mengirim file yang diganti namanya ke Select-Object cmdlet, yang memilih 5 pertama untuk ditampilkan.

Parameter Select-ObjectTunggu 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: Menunjukkan seluk-beluk parameter -ExpandProperty

Contoh ini menunjukkan selera 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 Yang Diperluas . 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), 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

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

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
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 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, output Jenis objek akan cocok dengan Jenis properti yang diperluas.

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

Peringatan

Jika Anda menerima kesalahan: Pilih : Properti tidak dapat diproses karena properti <PropertyName> 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, kesalahan akan terjadi.
  • Jika objek Terpilih memiliki properti dengan nama yang sama dengan properti Objek yang diperluas , kesalahan akan terjadi.
Type:String
Position:Named
Default value:None
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
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
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
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
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.

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
Accept pipeline input:False
Accept wildcard characters:True

-Skip

Melompati (tidak memilih) jumlah item yang ditentukan. Secara default, parameter Lewati dihitung dari awal array atau daftar objek, tetapi jika perintah menggunakan parameter Terakhir , parameter tersebut dihitung dari akhir daftar atau array.

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

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

-SkipIndex

Type:Int32[]
Position:Named
Default value:None
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
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 akan 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
Accept pipeline input:False
Accept wildcard characters:False

-Wait

Menunjukkan bahwa cmdlet menonaktifkan pengoptimalan. PowerShell menjalankan perintah dalam urutan yang muncul di alur perintah dan memungkinkannya 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
Accept pipeline input:False
Accept wildcard characters:False

Input

PSObject

Anda dapat menyalurkan objek apa pun ke Select-Object.

Output

PSObject

Catatan

  • Anda juga dapat merujuk ke Select-Object cmdlet dengan alias bawaannya, select. Untuk informasi selengkapnya, lihat about_Aliases.

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