Select-Object
Memilih objek atau properti objek.
Sintaks
Select-Object
[-InputObject <PSObject>]
[[-Property] <Object[]>]
[-ExcludeProperty <String[]>]
[-ExpandProperty <String>]
[-Unique]
[-CaseInsensitive]
[-Last <Int32>]
[-First <Int32>]
[-Skip <Int32>]
[-Wait]
[<CommonParameters>]
Select-Object
[-InputObject <PSObject>]
[[-Property] <Object[]>]
[-ExcludeProperty <String[]>]
[-ExpandProperty <String>]
[-Unique]
[-CaseInsensitive]
[-Skip <Int32>]
[-SkipLast <Int32>]
[<CommonParameters>]
Select-Object
[-InputObject <PSObject>]
[-Unique]
[-CaseInsensitive]
[-Wait]
[-Index <Int32[]>]
[<CommonParameters>]
Select-Object
[-InputObject <PSObject>]
[-Unique]
[-CaseInsensitive]
[-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 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]
instans ProcessName
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
A
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 string unik menggunakan parameter '-CaseInsensitive'
Contoh ini menggunakan perbandingan yang tidak peka huruf besar/kecil untuk mendapatkan string unik dari array string.
"aa", "Aa", "Bb", "bb" | Select-Object -Unique -CaseInsensitive
aa
Bb
Contoh 7: 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 8: 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 9: 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 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 10: 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 11: 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 12: 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 13: Pilih kunci yang dapat di-hash 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
Contoh 14: ExpandProperty mengubah objek asli
Contoh ini menunjukkan efek samping menggunakan parameter ExpandProperty . Saat Anda menggunakan ExpandProperty, Select-Object
menambahkan properti yang dipilih ke objek asli sebagai anggota NoteProperty .
PS> $object = [PSCustomObject]@{
name = 'USA'
children = [PSCustomObject]@{
name = 'Southwest'
}
}
PS> $object
name children
---- --------
USA @{name=Southwest}
# Use the ExpandProperty parameter to expand the children property
PS> $object | Select-Object @{n="country"; e={$_.name}} -ExpandProperty children
name country
---- -------
Southwest USA
# The original object has been altered
PS> $object
name children
---- --------
USA @{name=Southwest; country=USA}
Seperti yang Anda lihat, properti negara ditambahkan ke objek anak setelah menggunakan parameter ExpandProperty .
Contoh 15: Membuat objek baru dengan properti yang diperluas tanpa mengubah objek input
Anda dapat menghindari efek samping menggunakan parameter ExpandProperty dengan membuat objek baru dan menyalin properti dari objek input.
PS> $object = [PSCustomObject]@{
name = 'USA'
children = [PSCustomObject]@{
name = 'Southwest'
}
}
PS> $object
name children
---- --------
USA @{name=Southwest}
# Create a new object with selected properties
PS> $newobject = [PSCustomObject]@{
country = $object.name
children = $object.children
}
PS> $newobject
country children
------- --------
USA @{name=Southwest}
# $object remains unchanged
PS> $object
name children
---- --------
USA @{name=Southwest}
Parameter
-CaseInsensitive
Secara default, saat Anda menggunakan parameter Unik , cmdlet menggunakan perbandingan peka huruf besar/kecil. Saat Anda menggunakan parameter ini, cmdlet menggunakan perbandingan yang tidak peka huruf besar/kecil.
Parameter ini ditambahkan di PowerShell 7.4.
Jenis: | SwitchParameter |
Position: | Named |
Nilai default: | False |
Diperlukan: | False |
Terima input alur: | False |
Terima karakter wildcard: | False |
-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.
Jenis: | String[] |
Position: | Named |
Nilai default: | None |
Diperlukan: | False |
Terima input alur: | False |
Terima karakter wildcard: | 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.
Catatan
Ada efek samping saat menggunakan ExpandProperty. menambahkan Select-Object
properti yang dipilih ke objek asli sebagai anggota NoteProperty .
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.
Jenis: | String |
Position: | Named |
Nilai default: | None |
Diperlukan: | False |
Terima input alur: | False |
Terima karakter wildcard: | False |
-First
Menentukan jumlah objek yang akan dipilih dari awal array objek input.
Jenis: | Int32 |
Position: | Named |
Nilai default: | None |
Diperlukan: | False |
Terima input alur: | False |
Terima karakter wildcard: | 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.
Jenis: | Int32[] |
Position: | Named |
Nilai default: | None |
Diperlukan: | False |
Terima input alur: | False |
Terima karakter wildcard: | 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
.
Jenis: | PSObject |
Position: | Named |
Nilai default: | None |
Diperlukan: | False |
Terima input alur: | True |
Terima karakter wildcard: | False |
-Last
Menentukan jumlah objek yang akan dipilih dari akhir array objek input.
Jenis: | Int32 |
Position: | Named |
Nilai default: | None |
Diperlukan: | False |
Terima input alur: | False |
Terima karakter wildcard: | 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.
Jenis: | Object[] |
Position: | 0 |
Nilai default: | None |
Diperlukan: | False |
Terima input alur: | False |
Terima karakter wildcard: | 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.
Dimulai di PowerShell 7.4, Anda dapat menggunakan parameter Lewati dengan parameter SkipLast untuk melewati item dari awal dan akhir koleksi.
Jenis: | Int32 |
Position: | Named |
Nilai default: | None |
Diperlukan: | False |
Terima input alur: | False |
Terima karakter wildcard: | 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.
Jenis: | Int32[] |
Position: | Named |
Nilai default: | None |
Diperlukan: | False |
Terima input alur: | False |
Terima karakter wildcard: | 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.
Dimulai di PowerShell 7.4, Anda dapat menggunakan parameter Lewati dengan parameter SkipLast untuk melewati item dari awal dan akhir koleksi.
Jenis: | Int32 |
Position: | Named |
Nilai default: | None |
Diperlukan: | False |
Terima input alur: | False |
Terima karakter wildcard: | 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. Tambahkan parameter CaseInsensitive untuk melakukan perbandingan yang tidak peka huruf besar/kecil.
Jenis: | SwitchParameter |
Position: | Named |
Nilai default: | None |
Diperlukan: | False |
Terima input alur: | False |
Terima karakter wildcard: | 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.
Jenis: | SwitchParameter |
Position: | Named |
Nilai default: | None |
Diperlukan: | False |
Terima input alur: | False |
Terima karakter wildcard: | False |
Input
Anda dapat menyalurkan objek ke cmdlet ini.
Output
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.