Mengelola proses dengan cmdlet Proses
Sampel ini hanya berlaku untuk Windows PowerShell 5.1.
Anda dapat menggunakan cmdlet Proses di PowerShell untuk mengelola proses lokal dan jarak jauh di PowerShell.
Mendapatkan proses
Untuk menjalankan proses di komputer lokal, jalankan Get-Process
tanpa parameter.
Anda bisa mendapatkan proses tertentu dengan menentukan nama proses atau ID prosesnya. Perintah berikut mendapatkan proses Menganggur:
Get-Process -id 0
Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName
------- ------ ----- ----- ----- ------ -- -----------
0 0 0 16 0 0 Idle
Meskipun normal bagi cmdlet untuk tidak mengembalikan data dalam beberapa situasi, ketika Anda menentukan proses dengan ProcessId-nya, Get-Process
menghasilkan kesalahan jika tidak menemukan kecocokan, karena niat yang biasa adalah mengambil proses yang berjalan yang diketahui. Jika tidak ada proses dengan ID tersebut, kemungkinan ID salah atau bahwa proses minat telah keluar:
Get-Process -Id 99
Get-Process : No process with process ID 99 was found.
At line:1 char:12
+ Get-Process <<<< -Id 99
Anda dapat menggunakan parameter Get-Process
Nama cmdlet untuk menentukan subset proses berdasarkan nama proses. Parameter Nama dapat mengambil beberapa nama dalam daftar yang dipisahkan koma dan mendukung penggunaan kartubebas, sehingga Anda dapat mengetik pola nama.
Misalnya, perintah berikut mendapatkan proses yang namanya dimulai dengan "ex."
Get-Process -Name ex*
Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName
------- ------ ----- ----- ----- ------ -- -----------
234 7 5572 12484 134 2.98 1684 EXCEL
555 15 34500 12384 134 105.25 728 explorer
Karena kelas .NET System.Diagnostics.Process adalah fondasi untuk proses PowerShell, kelas ini mengikuti beberapa konvensi yang digunakan oleh System.Diagnostics.Process. Salah satu konvensi tersebut adalah bahwa nama proses untuk executable tidak pernah menyertakan .exe
di akhir nama yang dapat dieksekusi.
Get-Process
juga menerima beberapa nilai untuk parameter Nama.
Get-Process -Name exp*,power*
Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName
------- ------ ----- ----- ----- ------ -- -----------
540 15 35172 48148 141 88.44 408 explorer
605 9 30668 29800 155 7.11 3052 powershell
Anda dapat menggunakan parameter ComputerName untuk Get-Process
mendapatkan proses di komputer jarak jauh. Misalnya, perintah berikut mendapatkan proses PowerShell di komputer lokal (diwakili oleh "localhost") dan pada dua komputer jarak jauh.
Get-Process -Name PowerShell -ComputerName localhost, Server01, Server02
Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName
------- ------ ----- ----- ----- ------ -- -----------
258 8 29772 38636 130 3700 powershell
398 24 75988 76800 572 5816 powershell
605 9 30668 29800 155 7.11 3052 powershell
Nama komputer tidak terlihat dalam tampilan ini, tetapi disimpan di properti MachineName dari objek proses yang Get-Process
dikembalikan. Perintah berikut menggunakan Format-Table
cmdlet untuk menampilkan properti ID proses, ProcessName, dan MachineName (ComputerName) dari objek proses.
Get-Process -Name PowerShell -ComputerName localhost, Server01, Server01 |
Format-Table -Property ID, ProcessName, MachineName
Id ProcessName MachineName
-- ----------- -----------
3700 powershell Server01
3052 powershell Server02
5816 powershell localhost
Perintah yang lebih kompleks ini menambahkan properti MachineName ke tampilan standar Get-Process
.
Get-Process powershell -ComputerName localhost, Server01, Server02 |
Format-Table -Property Handles,
@{Label="NPM(K)";Expression={[int]($_.NPM/1024)}},
@{Label="PM(K)";Expression={[int]($_.PM/1024)}},
@{Label="WS(K)";Expression={[int]($_.WS/1024)}},
@{Label="VM(M)";Expression={[int]($_.VM/1MB)}},
@{Label="CPU(s)";Expression={if ($_.CPU -ne $()){$_.CPU.ToString("N")}}},
Id, ProcessName, MachineName -auto
Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName MachineName
------- ------ ----- ----- ----- ------ -- ----------- -----------
258 8 29772 38636 130 3700 powershell Server01
398 24 75988 76800 572 5816 powershell localhost
605 9 30668 29800 155 7.11 3052 powershell Server02
Menghentikan proses
PowerShell memberi Anda fleksibilitas untuk mencantumkan proses, tetapi bagaimana dengan menghentikan proses?
Stop-Process
Cmdlet mengambil Nama atau Id untuk menentukan proses yang ingin Anda hentikan. Kemampuan Anda untuk menghentikan proses tergantung pada izin Anda. Beberapa proses tidak dapat dihentikan. Misalnya, jika Anda mencoba menghentikan proses menganggur, Anda mendapatkan kesalahan:
Stop-Process -Name Idle
Stop-Process : Process 'Idle (0)' cannot be stopped due to the following error:
Access is denied
At line:1 char:13
+ Stop-Process <<<< -Name Idle
Anda juga dapat memaksa permintaan dengan parameter Konfirmasi . Parameter ini sangat berguna jika Anda menggunakan kartubebas saat menentukan nama proses, karena Anda mungkin secara tidak sengaja cocok dengan beberapa proses yang tidak ingin Anda hentikan:
Stop-Process -Name t*,e* -Confirm
Confirm
Are you sure you want to perform this action?
Performing operation "Stop-Process" on Target "explorer (408)".
[Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?] Help
(default is "Y"):n
Confirm
Are you sure you want to perform this action?
Performing operation "Stop-Process" on Target "taskmgr (4072)".
[Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?] Help
(default is "Y"):n
Manipulasi proses yang kompleks dimungkinkan dengan menggunakan beberapa cmdlet pemfilteran objek. Karena objek Proses memiliki properti Merespons yang benar ketika tidak lagi merespons, Anda dapat menghentikan semua aplikasi nonresponsif dengan perintah berikut:
Get-Process | Where-Object -FilterScript {$_.Responding -eq $false} | Stop-Process
Anda dapat menggunakan pendekatan yang sama dalam situasi lain. Misalnya, aplikasi area pemberitahuan sekunder secara otomatis berjalan saat pengguna memulai aplikasi lain. Anda mungkin menemukan bahwa ini tidak berfungsi dengan benar di sesi Layanan Terminal, tetapi Anda masih ingin menyimpannya dalam sesi yang berjalan di konsol komputer fisik. Sesi yang terhubung ke desktop komputer fisik selalu memiliki ID sesi 0, sehingga Anda dapat menghentikan semua instans proses yang ada di sesi lain dengan menggunakan Where-Object
dan prosesnya, SessionId:
Get-Process -Name BadApp | Where-Object -FilterScript {$_.SessionId -neq 0} | Stop-Process
Stop-Process
Cmdlet tidak memiliki parameter ComputerName. Oleh karena itu, untuk menjalankan perintah hentikan proses pada komputer jarak jauh, Anda perlu menggunakan Invoke-Command
cmdlet. Misalnya, untuk menghentikan proses PowerShell di komputer jarak jauh Server01, ketik:
Invoke-Command -ComputerName Server01 {Stop-Process Powershell}
Menghentikan Semua Sesi PowerShell Lainnya
Kadang-kadang mungkin berguna untuk dapat menghentikan semua sesi PowerShell yang berjalan selain sesi saat ini. Jika sesi menggunakan terlalu banyak sumber daya atau tidak dapat diakses (mungkin berjalan dari jarak jauh atau di sesi desktop lain), Anda mungkin tidak dapat langsung menghentikannya. Namun, jika Anda mencoba menghentikan semua sesi yang sedang berjalan, sesi saat ini dapat dihentikan.
Setiap sesi PowerShell memiliki PID variabel lingkungan yang berisi Id proses Windows PowerShell. Anda dapat memeriksa $PID terhadap Id setiap sesi dan mengakhiri hanya sesi Windows PowerShell yang memiliki Id berbeda. Perintah alur berikut melakukan ini dan mengembalikan daftar sesi yang dihentikan (karena penggunaan parameter PassThru ):
Get-Process -Name powershell | Where-Object -FilterScript {$_.Id -ne $PID} |
Stop-Process -PassThru
Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName
------- ------ ----- ----- ----- ------ -- -----------
334 9 23348 29136 143 1.03 388 powershell
304 9 23152 29040 143 1.03 632 powershell
302 9 20916 26804 143 1.03 1116 powershell
335 9 25656 31412 143 1.09 3452 powershell
303 9 23156 29044 143 1.05 3608 powershell
287 9 21044 26928 143 1.02 3672 powershell
Memulai, men-debug, dan menunggu proses
PowerShell juga dilengkapi dengan cmdlet untuk memulai (atau memulai ulang), men-debug proses, dan menunggu proses selesai sebelum menjalankan perintah. Untuk informasi tentang cmdlet ini, lihat topik bantuan cmdlet untuk setiap cmdlet.
Lihat juga
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