Süreç cmdlet'leriyle süreçleri yönetme
Bu örnek yalnızca Windows PowerShell 5,1 için geçerlidir.
PowerShell'de yerel ve uzak işlemleri yönetmek için PowerShell'deki İşlem cmdlet'lerini kullanabilirsiniz.
Süreçleri alma
İşlemlerin yerel bilgisayarda çalışmasını sağlamak için hiçbir parametre olmadan bir Get-Process çalıştırın.
Belirli işlemleri, işlem adlarını veya işlem kimliklerini belirterek 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'sine göre bir işlem belirttiğinizde Get-Process hiçbir eşleşme bulamazsa bir hata oluşturur çünkü genel amaç, bilinen bir çalışan işlemi geri getirmektir. Bu kimliğe sahip bir işlem yoksa büyük olasılıkla kimlik yanlıştır veya ilgili süreçten zaten çıkılmıştı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ını temel alan bir işlem alt kümesi belirtmek için Get-Process cmdlet'inin Ad parametresini kullanabilirsiniz. Ad parametresi virgülle ayrılmış bir listede birden fazla ad alabilir ve joker karakterlerin kullanımını destekler, böylece ad kalıplarını 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ı kurallara uyar. Bu kurallardan biri, yürütülebilir dosyanın işlem adının hiçbir zaman yürütülebilir dosya adının sonunda .exe içermemesidir.
Get-Process ayrıca Name parametresi için birden fazla değeri 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 bilgisayarlardaki işlemleri almak için Get-Process'in ComputerName parametresini kullanabilirsiniz. Örneğin, aşağıdaki komut, yerel bilgisayardaki ("localhost" ile temsil edilir) ve iki uzak bilgisayardaki 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 Get-Process'in döndürdüğü işlem nesnelerinin MachineName özelliğinde depolanırlar. Aşağıdaki komut, işlem ID, ProcessName ve MachineName (ComputerName) özelliklerini görüntülemek için Format-Table cmdlet'ini kullanır süreç nesnelerinin
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 ekranına 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
Süreçleri durdurma
PowerShell size süreçleri listeleme konusunda esneklik sağlar, peki ya bir süreci durdurmaya ne dersiniz?
Stop-Process cmdlet'i, durdurmak istediğiniz işlemi belirtmek için bir Ad veya Kimlik alır. İşlemleri durdurma yeteneğiniz izinlerinize bağlıdır. Bazı işlemler durdurulamaz. Örneğin, boştaki işlemi 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 Onayla parametresini kullanarak istemi zorunlu kılabilirsiniz. Bu parametre özellikle işlem adını belirtirken joker karakter kullanırsanız kullanışlı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
Bazı nesne filtreleme cmdlet'leri kullanılarak karmaşık süreç manipülasyonu mümkündür. Bir İşlem nesnesi, artık yanıt vermediğinde doğru olan bir Yanıt Veriyor özelliğine sahip olduğundan, yanıt vermeyen tüm uygulamaları aşağıdaki komutla durdurabilirsiniz:
Get-Process | Where-Object -FilterScript {$_.Responding -eq $false} | Stop-Process
Aynı yaklaşımı başka durumlarda da 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 bunu fiziksel bilgisayar konsolunda çalışan oturumlarda tutmak isteyebilirsiniz. Fiziksel bilgisayar masaüstüne bağlı oturumların oturum kimliği her zaman 0'dır; bu nedenle, Where-Object ve SessionId işlemini kullanarak diğer oturumlardaki sürecin tüm örneklerini durdurabilirsiniz. :
Get-Process -Name BadApp | Where-Object -FilterScript {$_.SessionId -neq 0} | Stop-Process
İşlemi Durdur cmdlet'inde BilgisayarAdı parametresi yoktur. Bu nedenle, uzaktaki bir bilgisayarda işlemi durdurma komutunu çalıştırmak için Invoke-Command cmdlet'ini kullanmanız gerekir. Örneğin, Server01 uzak bilgisayarındaki PowerShell işlemini durdurmak için şunu yazın:
Invoke-Command -ComputerName Server01 {Stop-Process Powershell}
Diğer Tüm PowerShell Oturumlarını Durdurma
Geçerli oturum dışında çalışan tüm PowerShell oturumlarını durdurabilmek bazen yararlı olabilir. Bir oturum çok fazla kaynak kullanıyorsa veya erişilemiyorsa (uzaktan veya başka bir masaüstü oturumunda çalışıyor olabilir), onu doğrudan durduramayabilirsiniz. Ancak çalışan tüm 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 PID ortam değişkenine sahiptir. $PID'yi her oturumun kimliğine göre kontrol edebilir ve yalnızca farklı kimliğe sahip Windows PowerShell oturumlarını sonlandırabilirsiniz. Aşağıdaki ardışık düzen 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 bir işlemi başlatmak (veya yeniden başlatmak), bir işlemin hatalarını ayıklamak ve bir komutu çalıştırmadan önce işlemin tamamlanmasını beklemek için cmdlet'lerle birlikte gelir. Bu cmdlet'ler hakkında bilgi için her cmdlet'in cmdlet yardım konusuna bakın.
Ayrıca bakınız
- Get-Process
- Stop-Process
- Start-Process
- Wait-Process
- Debug-Process
- Invoke-Command