İşlem cmdlet'leri ile işlemleri yönetme
Bu örnek yalnızca Windows PowerShell 5.1 için geçerlidir.
PowerShell'deki yerel ve uzak işlemleri yönetmek için PowerShell'deki İşlem cmdlet'lerini kullanabilirsiniz.
İşlemleri alma
yerel bilgisayarda çalışan işlemleri almak için parametresiz bir Get-Process
çalıştırın.
İşlem adlarını veya işlem kimliklerini belirterek belirli işlemleri alabilirsiniz. Aşağıdaki komut Idle işlemini alır:
Get-Process -id 0
Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName
------- ------ ----- ----- ----- ------ -- -----------
0 0 0 16 0 0 Idle
Bazı durumlarda cmdlet'lerin veri döndürmemesi normal olsa da, ProcessId değeriyle bir işlem belirttiğinizde, Get-Process
her zamanki amaç bilinen bir çalışan işlemi almak olduğundan eşleşme bulamazsa bir hata oluşturur. Bu kimliğe sahip bir işlem yoksa, kimliğin yanlış olması veya ilgi çekici işlemden zaten çıkılmış olması olasıdır:
Get-Process -Id 99
Get-Process : No process with process ID 99 was found.
At line:1 char:12
+ Get-Process <<<< -Id 99
İşlem adına göre işlemlerin Get-Process
bir alt kümesini belirtmek için cmdlet'in Name parametresini kullanabilirsiniz. Name parametresi virgülle ayrılmış bir listede birden çok ad alabilir ve joker karakter kullanımını desteklediğinden, ad desenleri yazabilirsiniz.
Örneğin, aşağıdaki komut adları "ex" ile başlayan işlemi alır.
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
.NET System.Diagnostics.Process sınıfı PowerShell işlemlerinin temeli olduğundan, System.Diagnostics.Process tarafından kullanılan bazı kuralları izler. Bu kurallardan biri, yürütülebilir dosyanın işlem adının hiçbir zaman yürütülebilir adın sonunda öğesini içermemesidir .exe
.
Get-Process
ayrıca Name parametresi için birden çok değer kabul eder.
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
Uzak bilgisayarlarda işlemleri almak için computerName parametresini Get-Process
kullanabilirsiniz. Örneğin, aşağıdaki komut yerel bilgisayarda ("localhost" ile temsil edilir) ve iki uzak bilgisayarda PowerShell işlemlerini alır.
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
Bilgisayar adları bu ekranda belirgin değildir, ancak döndüren Get-Process
işlem nesnelerinin MachineName özelliğinde depolanır. Aşağıdaki komut, işlem nesnelerinin Format-Table
işlem kimliği, İşlemAdı ve MakineAdı ( ComputerName ) özelliklerini görüntülemek için cmdlet'ini kullanır.
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
Bu daha karmaşık komut , MachineName özelliğini standart Get-Process
ekrana ekler.
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
İşlemleri durdurma
PowerShell size işlemleri listeleme esnekliği sağlar, ancak bir işlemi durdurma hakkında ne olur?
Cmdlet, Stop-Process
durdurmak istediğiniz işlemi belirtmek için bir Ad veya Kimlik alır. İşlemleri durdurabilme beceriniz izinlerinize bağlıdır. Bazı işlemler durdurulamaz. Örneğin, boşta kalma işlemini durdurmaya çalışırsanız bir hata alırsınız:
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
Ayrıca Confirm parametresiyle istemeye zorlayabilirsiniz. Bu parametre özellikle işlem adını belirtirken joker karakter kullanıyorsanız yararlıdır çünkü durdurmak istemediğiniz bazı işlemleri yanlışlıkla eşleştirebilirsiniz:
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
Karmaşık işlem düzenlemesi, nesne filtreleme cmdlet'lerinden bazıları kullanılarak mümkündür. İşlem nesnesi artık yanıt vermediğinde true olan bir Responding özelliğine sahip olduğundan, aşağıdaki komutla yanıt vermeyen tüm uygulamaları durdurabilirsiniz:
Get-Process | Where-Object -FilterScript {$_.Responding -eq $false} | Stop-Process
Diğer durumlarda da aynı yaklaşımı kullanabilirsiniz. Örneğin, kullanıcılar başka bir uygulamayı başlattığında ikincil bir bildirim alanı uygulamasının otomatik olarak çalıştığını varsayalım. Bunun Terminal Hizmetleri oturumlarında düzgün çalışmadığını fark edebilirsiniz, ancak yine de fiziksel bilgisayar konsolunda çalışan oturumlarda tutmak istersiniz. Fiziksel bilgisayar masaüstüne bağlı oturumların oturum kimliği her zaman 0'dır; bu nedenle, ve işlemini kullanarak Where-Object
diğer oturumlardaki işlemin tüm örneklerini durdurabilirsiniz:
Get-Process -Name BadApp | Where-Object -FilterScript {$_.SessionId -neq 0} | Stop-Process
Stop-Process
Cmdlet'in ComputerName parametresi yok. Bu nedenle, uzak bir bilgisayarda işlem durdurma komutunu çalıştırmak için cmdlet'ini Invoke-Command
kullanmanız gerekir. Örneğin, Server01 uzak bilgisayarında PowerShell işlemini durdurmak için şunu yazın:
Invoke-Command -ComputerName Server01 {Stop-Process Powershell}
Diğer Tüm PowerShell Oturumlarını Durdurma
Bazen geçerli oturum dışındaki tüm çalışan PowerShell oturumlarını durdurabilmek yararlı olabilir. Oturum çok fazla kaynak kullanıyorsa veya erişilemiyorsa (uzaktan veya başka bir masaüstü oturumunda çalışıyor olabilir), oturumu doğrudan durduramayabilirsiniz. Ancak tüm çalışan oturumları durdurmaya çalışırsanız, bunun yerine geçerli oturum sonlandırılabilir.
Her PowerShell oturumu, Windows PowerShell işleminin kimliğini içeren bir ortam değişkeni PID'sine sahiptir. $PID her oturumun kimliğine göre denetleyebilirsiniz ve yalnızca farklı bir kimliğe sahip Windows PowerShell oturumları sonlandırabilirsiniz. Aşağıdaki işlem hattı komutu bunu yapar ve sonlandırılan oturumların listesini döndürür (PassThru parametresinin kullanılması nedeniyle):
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
İşlemleri başlatma, hata ayıklama ve bekleme
PowerShell ayrıca başlatma (veya yeniden başlatma), işlem hatalarını ayıklama ve komutu çalıştırmadan önce işlemin tamamlanmasını beklemeye yönelik cmdlet'lerle birlikte gelir. Bu cmdlet'ler hakkında bilgi için her cmdlet için cmdlet yardım konusuna bakın.