ForEach-Object
Melakukan operasi terhadap setiap item dalam kumpulan objek input.
Sintaks
ForEach-Object
[-InputObject <PSObject>]
[-Begin <ScriptBlock>]
[-Process] <ScriptBlock[]>
[-End <ScriptBlock>]
[-RemainingScripts <ScriptBlock[]>]
[-WhatIf]
[-Confirm]
[<CommonParameters>]
ForEach-Object
[-InputObject <PSObject>]
[-MemberName] <String>
[-ArgumentList <Object[]>]
[-WhatIf]
[-Confirm]
[<CommonParameters>]
Deskripsi
ForEach-Object
Cmdlet melakukan operasi pada setiap item dalam kumpulan objek input. Objek input dapat disalurkan ke cmdlet atau ditentukan menggunakan parameter InputObject .
Dimulai di Windows PowerShell 3.0, ada dua cara berbeda untuk membuat ForEach-Object
perintah.
Blok skrip. Anda dapat menggunakan blok skrip untuk menentukan operasi. Dalam blok skrip, gunakan
$_
variabel untuk mewakili objek saat ini. Blok skrip adalah nilai parameter Proses . Blok skrip dapat berisi skrip PowerShell apa pun.Misalnya, perintah berikut mendapatkan nilai properti ProcessName dari setiap proses di komputer.
Get-Process | ForEach-Object {$_.ProcessName}
ForEach-Object
begin
mendukung blok ,process
, danend
seperti yang dijelaskan dalam about_functions.Catatan
Blok skrip berjalan dalam cakupan pemanggil. Oleh karena itu, blok memiliki akses ke variabel dalam cakupan tersebut dan dapat membuat variabel baru yang bertahan dalam cakupan tersebut setelah cmdlet selesai.
Pernyataan operasi. Anda juga dapat menulis pernyataan operasi, yang jauh lebih seperti bahasa alami. Anda dapat menggunakan pernyataan operasi untuk menentukan nilai properti atau memanggil metode. Pernyataan operasi diperkenalkan di Windows PowerShell 3.0.
Misalnya, perintah berikut juga mendapatkan nilai properti ProcessName dari setiap proses di komputer.
Get-Process | ForEach-Object ProcessName
Contoh
Contoh 1: Membagi bilangan bulat dalam array
Contoh ini mengambil array tiga bilangan bulat dan membagi masing-masing dengan 1024.
30000, 56798, 12432 | ForEach-Object -Process {$_/1024}
29.296875
55.466796875
12.140625
Contoh 2: Mendapatkan panjang semua file dalam direktori
Contoh ini memproses file dan direktori di direktori $PSHOME
penginstalan PowerShell .
Get-ChildItem $PSHOME |
ForEach-Object -Process {if (!$_.PSIsContainer) {$_.Name; $_.Length / 1024; " " }}
Jika objek bukan direktori, blok skrip mendapatkan nama file, membagi nilai properti Panjangnya dengan 1024, dan menambahkan spasi (" ") untuk memisahkannya dari entri berikutnya. Cmdlet menggunakan properti PSISContainer untuk menentukan apakah objek adalah direktori.
Contoh 3: Beroperasi pada peristiwa Sistem terbaru
Contoh ini menulis 1000 peristiwa terbaru dari log peristiwa Sistem ke file teks. Waktu saat ini ditampilkan sebelum dan sesudah memproses peristiwa.
Get-EventLog -LogName System -Newest 1000 |
ForEach-Object -Begin {Get-Date} -Process {
Out-File -FilePath Events.txt -Append -InputObject $_.Message
} -End {Get-Date}
Get-EventLog
mendapatkan 1000 peristiwa terbaru dari log peristiwa Sistem dan menyalurkannya ke ForEach-Object
cmdlet. Parameter Mulai menampilkan tanggal dan waktu saat ini. Selanjutnya, parameter Proses menggunakan Out-File
cmdlet untuk membuat file teks yang bernama events.txt dan menyimpan properti pesan dari setiap peristiwa dalam file tersebut. Terakhir, parameter Akhir digunakan untuk menampilkan tanggal dan waktu setelah semua pemrosesan selesai.
Contoh 4: Mengubah nilai kunci Registri
Contoh ini mengubah nilai entri registri RemotePath di semua subkey di bawah HKCU:\Network
kunci menjadi teks huruf besar.
Get-ItemProperty -Path HKCU:\Network\* |
ForEach-Object {
Set-ItemProperty -Path $_.PSPath -Name RemotePath -Value $_.RemotePath.ToUpper()
}
Anda dapat menggunakan format ini untuk mengubah formulir atau konten nilai entri registri.
Setiap kunci dalam kunci Jaringan mewakili drive jaringan yang dipetakan yang terhubung kembali saat masuk. Entri RemotePath berisi jalur UNC dari drive yang tersambung. Misalnya, jika Anda memetakan E:
drive ke \\Server\Share
, subkunci E dibuat HKCU:\Network
dengan nilai registri RemotePath diatur ke \\Server\Share
.
Perintah menggunakan Get-ItemProperty
cmdlet untuk mendapatkan semua subkuntah kunci Jaringan dan Set-ItemProperty
cmdlet untuk mengubah nilai entri registri RemotePath di setiap kunci. Set-ItemProperty
Dalam perintah, jalur adalah nilai properti PSPath dari kunci registri. Ini adalah properti objek Microsoft .NET Framework yang mewakili kunci registri, bukan entri registri. Perintah menggunakan metode ToUpper() dari nilai RemotePath , yang merupakan string REG_SZ.
Karena Set-ItemProperty
mengubah properti setiap kunci, ForEach-Object
cmdlet diperlukan untuk mengakses properti.
Contoh 5: Gunakan variabel otomatis $null
Contoh ini menunjukkan efek pipa $null
variabel otomatis ke ForEach-Object
cmdlet.
1, 2, $null, 4 | ForEach-Object {"Hello"}
Hello
Hello
Hello
Hello
Karena PowerShell memperlakukan $null
sebagai tempat penampung eksplisit, ForEach-Object
cmdlet menghasilkan nilai untuk $null
seperti yang dilakukan untuk objek lain yang disalurkan ke dalamnya.
Contoh 6: Mendapatkan nilai properti
Contoh ini mendapatkan nilai properti Jalur dari semua modul PowerShell yang diinstal menggunakan parameter MemberName cmdlet ForEach-Object
.
Get-Module -ListAvailable | ForEach-Object -MemberName Path
Get-Module -ListAvailable | Foreach Path
Perintah kedua setara dengan yang pertama. Ini menggunakan Foreach
alias ForEach-Object
cmdlet dan menghilangkan nama parameter MemberName , yang bersifat opsional.
ForEach-Object
Cmdlet berguna untuk mendapatkan nilai properti, karena mendapatkan nilai tanpa mengubah jenis, tidak seperti cmdlet Format atau Select-Object
cmdlet, yang mengubah jenis nilai properti.
Contoh 7: Membagi nama modul menjadi nama komponen
Contoh ini menunjukkan tiga cara untuk membagi dua nama modul yang dipisahkan titik menjadi nama komponennya. Perintah memanggil metode Pisahkan string. Ketiga perintah menggunakan sintaks yang berbeda, tetapi setara dan dapat dipertukarkan. Outputnya sama untuk ketiga kasus.
"Microsoft.PowerShell.Core", "Microsoft.PowerShell.Host" |
ForEach-Object {$_.Split(".")}
"Microsoft.PowerShell.Core", "Microsoft.PowerShell.Host" |
ForEach-Object -MemberName Split -ArgumentList "."
"Microsoft.PowerShell.Core", "Microsoft.PowerShell.Host" |
Foreach Split "."
Microsoft
PowerShell
Core
Microsoft
PowerShell
Host
Perintah pertama menggunakan sintaks tradisional, yang mencakup blok skrip dan operator $_
objek saat ini . Ini menggunakan sintaks titik untuk menentukan metode dan tanda kurung untuk mengapit argumen pembatas.
Perintah kedua menggunakan parameter MemberName untuk menentukan metode Split dan parameter ArgumentList untuk mengidentifikasi titik (.
) sebagai pemisah pemisah.
Perintah ketiga menggunakan alias Foreach dari ForEach-Object
cmdlet dan menghilangkan nama parameter MemberName dan ArgumentList , yang bersifat opsional.
Contoh 8: Menggunakan ForEach-Object dengan dua blok skrip
Dalam contoh ini, kami meneruskan dua blok skrip secara posisional. Semua blok skrip mengikat parameter Proses . Namun, mereka diperlakukan seolah-olah mereka telah diteruskan ke parameter Mulai dan Proses .
1..2 | ForEach-Object { 'begin' } { 'process' }
begin
process
process
Contoh 9: Menggunakan ForEach-Object dengan lebih dari dua blok skrip
Dalam contoh ini, kami meneruskan empat blok skrip secara posisional. Semua blok skrip mengikat parameter Proses . Namun, mereka diperlakukan seolah-olah mereka telah diteruskan ke parameter Mulai, Proses, dan Akhir .
1..2 | ForEach-Object { 'begin' } { 'process A' } { 'process B' } { 'end' }
begin
process A
process B
process A
process B
end
Catatan
Blok skrip pertama selalu dipetakan ke begin
blok, blok terakhir dipetakan ke end
blok, dan dua blok tengah dipetakan ke process
blok.
Contoh 10: Jalankan beberapa blok skrip untuk setiap item alur
Seperti yang ditunjukkan pada contoh sebelumnya, beberapa blok skrip yang diteruskan menggunakan parameter Proses dipetakan ke parameter Mulai dan Akhir . Untuk menghindari pemetaan ini, Anda harus memberikan nilai eksplisit untuk parameter Mulai dan Akhir .
1..2 | ForEach-Object -Begin $null -Process { 'one' }, { 'two' }, { 'three' } -End $null
one
two
three
one
two
three
Parameter
-ArgumentList
Menentukan array argumen ke panggilan metode. Untuk informasi selengkapnya tentang perilaku ArgumentList, lihat about_Splatting.
Parameter ini diperkenalkan di Windows PowerShell 3.0.
Type: | Object[] |
Aliases: | Args |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Begin
Menentukan blok skrip yang berjalan sebelum cmdlet ini memproses objek input apa pun. Blok skrip ini hanya dijalankan sekali untuk seluruh alur. Untuk informasi selengkapnya tentang blokir, begin
lihat about_Functions.
Type: | ScriptBlock |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Confirm
Meminta Anda mengonfirmasi sebelum menjalankan cmdlet.
Type: | SwitchParameter |
Aliases: | cf |
Position: | Named |
Default value: | False |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-End
Menentukan blok skrip yang berjalan setelah cmdlet ini memproses semua objek input. Blok skrip ini hanya dijalankan sekali untuk seluruh alur. Untuk informasi selengkapnya tentang blokir, end
lihat about_Functions.
Type: | ScriptBlock |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-InputObject
Menentukan objek input. ForEach-Object
menjalankan blok skrip atau pernyataan operasi pada setiap objek input. Masukkan variabel yang berisi objek, atau ketik perintah atau ekspresi yang mendapatkan objek.
Saat Anda menggunakan parameter InputObject dengan ForEach-Object
, alih-alih hasil perintah pipa ke ForEach-Object
, nilai InputObject diperlakukan sebagai satu objek. Ini benar bahkan jika nilainya adalah koleksi yang merupakan hasil dari perintah, seperti -InputObject (Get-Process)
.
Karena InputObject tidak dapat mengembalikan properti individual dari array atau kumpulan objek, kami sarankan jika Anda menggunakan ForEach-Object
untuk melakukan operasi pada kumpulan objek untuk objek yang memiliki nilai tertentu dalam properti yang ditentukan, Anda gunakan ForEach-Object
dalam alur, seperti yang ditunjukkan dalam contoh dalam topik ini.
Type: | PSObject |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | True |
Accept wildcard characters: | False |
-MemberName
Menentukan nama properti anggota untuk mendapatkan atau metode anggota untuk dipanggil. Anggota harus menjadi anggota instans, bukan anggota statis.
Karakter kartubebas diizinkan, tetapi hanya berfungsi jika string yang dihasilkan diselesaikan ke nilai unik.
Misalnya, jika Anda menjalankan Get-Process | ForEach -MemberName *Name
, pola kartubebas cocok dengan lebih dari satu anggota yang menyebabkan perintah gagal.
Parameter ini diperkenalkan di Windows PowerShell 3.0.
Type: | String |
Position: | 0 |
Default value: | None |
Required: | True |
Accept pipeline input: | False |
Accept wildcard characters: | True |
-Process
Menentukan operasi yang dilakukan pada setiap objek input. Blok skrip ini dijalankan untuk setiap objek dalam alur. Untuk informasi selengkapnya tentang blokir, process
lihat about_Functions.
Saat Anda menyediakan beberapa blok skrip ke parameter Proses , blok skrip pertama selalu dipetakan ke begin
blok. Jika hanya ada dua blok skrip, blok kedua dipetakan ke process
blok. Jika ada tiga blok skrip atau lebih, blok skrip pertama selalu dipetakan ke begin
blok, blok terakhir dipetakan ke end
blok, dan blok tengah dipetakan ke process
blok.
Type: | ScriptBlock[] |
Position: | 0 |
Default value: | None |
Required: | True |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-RemainingScripts
Menentukan semua blok skrip yang tidak diambil oleh parameter Proses .
Parameter ini diperkenalkan di Windows PowerShell 3.0.
Type: | ScriptBlock[] |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-WhatIf
Menunjukkan apa yang akan terjadi jika cmdlet berjalan. Cmdlet tidak dijalankan.
Type: | SwitchParameter |
Aliases: | wi |
Position: | Named |
Default value: | False |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
Input
Anda dapat menyalurkan objek apa pun ke cmdlet ini.
Output
Cmdlet ini mengembalikan objek yang ditentukan oleh input.
Catatan
Windows PowerShell menyertakan alias berikut untuk ForEach-Object
:
%
foreach
ForEach-Object
Cmdlet berfungsi seperti pernyataan Foreach, kecuali bahwa Anda tidak dapat menyalurkan input ke pernyataan Foreach. Untuk informasi selengkapnya tentang pernyataan Foreach , lihat about_Foreach.
Mulai dari PowerShell 4.0, Where
dan ForEach
metode ditambahkan untuk digunakan dengan koleksi. Anda dapat membaca selengkapnya tentang metode baru ini di sini about_arrays
Link Terkait
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk