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