İşlem Cmdlet’leri ile İşlemleri Yönetme
Windows PowerShell içindeki yerel ve uzak işlemleri yönetmek için Windows PowerShell işlem cmdlet 'lerini kullanabilirsiniz.
Işlemleri alma (Get-Process)
Yerel bilgisayarda çalışan işlemi almak için, Get-Process parametresiz bir ile çalıştırın.
İşlem adlarını veya işlem kimliklerini belirterek belirli işlemleri alabilirsiniz. Aşağıdaki komut, boşta 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
Cmdlet 'lerin bazı durumlarda hiçbir veri döndürmesi normaldir, ancak bir işlemi işlem kimliği tarafından belirttiğinizde, Get-Process her zamanki amaç bilinen çalışan bir işlem almak olduğundan, hiçbir eşleşme tespit edildiğinde bir hata oluşturur. Bu kimliğe sahip bir işlem yoksa, kimlik yanlış veya ilgilendiğiniz işlemin zaten çıkış yapmış 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
Get-Processİşlem adına göre bir işlem alt kümesi belirtmek için cmdlet 'In ad parametresini kullanabilirsiniz. Ad parametresi, virgülle ayrılmış bir listede birden çok ad alabilir ve joker karakter kullanımını destekler, böylece 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ı Windows PowerShell işlemler için temel olduğundan, System. Diagnostics. Process tarafından kullanılan bazı kurallara uyar. Bu kurallardan biri, yürütülebilir dosya için işlem adının, yürütülebilir adın sonundaki ".exe" öğesini hiçbir zaman içermeyeceğinden.
Get-Process , ad parametresi için birden çok değeri de 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
Get-ProcessUzak bilgisayarlarda işlem almak Için ComputerName parametresini kullanabilirsiniz. Örneğin, aşağıdaki komut yerel bilgisayardaki ("localhost" ile temsil edilen) ve iki uzak bilgisayarda PowerShell süreçlerini 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 görünmez değildir, ancak döndüren işlem nesnelerinin MachineName özelliğinde depolanır Get-Process . Aşağıdaki komut, Format-Table işlem nesnelerinin Işlem kimliği, ProcessName ve MachineName (computername) özelliklerini göstermek 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 görüntülemeye 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
Işlemleri durdurma (durdurma-Işlem)
Windows PowerShell, işlemleri listeleme esnekliği sağlar, ancak bir işlemi durdurmak için ne yapmanız gerekir?
Stop-ProcessCmdlet 'i durdurmak istediğiniz bir işlemi belirtmek için bir ad veya kimlik alır. İşlemlerin durulabilme özelliği izinlerinize bağlıdır. Bazı süreçler durdurulamıyor. Örneğin, boşta işlemi durdurmayı denerseniz 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 parametresiyle isteme de zorlayabilirsiniz. Bu parametre özellikle, durdurmak istemediğiniz bazı işlemleri yanlışlıkla eşleşeceğinden, işlem adını belirtirken bir joker karakter kullandığınızda yararlıdır:
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, bazı nesne filtreleme cmdlet 'leri kullanılarak mümkündür. Işlem nesnesi artık yanıt vermediğinde doğru bir yanıt veren özelliği içerdiğinden, yanıt vermeyen tüm uygulamaları aşağıdaki komutla durdurabilirsiniz:
Get-Process | Where-Object -FilterScript {$_.Responding -eq $false} | Stop-Process
Diğer durumlarda aynı yaklaşımı kullanabilirsiniz. Örneğin, kullanıcılar başka bir uygulama başlatırken bir ikincil bildirim alanı uygulamasının otomatik olarak çalıştığını varsayalım. Bu, Terminal Hizmetleri oturumlarında doğru şekilde çalışmadığını, ancak yine de fiziksel bilgisayar konsolunda çalışan oturumlarda tutmak istediğinizi fark edebilirsiniz. Fiziksel bilgisayar masaüstüne bağlı olan oturumların her zaman 0 oturum KIMLIĞI vardır; bu nedenle, ve işlemini kullanarak diğer oturumlardaki işlemin tüm örneklerini durdurabilirsiniz Where-Object ve bu işlem, SessionID:
Get-Process -Name BadApp | Where-Object -FilterScript {$_.SessionId -neq 0} | Stop-Process
Stop-ProcessCmdlet 'In ComputerName parametresi yok. Bu nedenle, uzak bir bilgisayarda bir stop Process 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 Windows PowerShell oturumları durduruluyor
bu işlem, geçerli oturum dışında çalışan tüm Windows PowerShell oturumlarını durduramayacak şekilde yararlı olabilir. Bir oturum çok fazla kaynak kullanıyorsa veya erişilemez (uzaktan veya başka bir Masaüstü oturumunda çalışıyor olabilir), bunu doğrudan durdurmanız mümkün olmayabilir. Ancak, tüm çalışan oturumları durdurmayı denerseniz, bunun yerine geçerli oturum sonlandırılabilir.
her Windows PowerShell oturumunun, Windows PowerShell işleminin kimliğini içeren bir ortam değişkeni pıd 'si vardır. $PID her bir oturumun kimliğine karşı denetleyebilir ve yalnızca farklı kimliğe sahip Windows PowerShell oturumlarını sonlandırabilirsiniz. Aşağıdaki işlem hattı komutu bunu yapar ve sonlandırılan oturumların listesini döndürür ( geçiş parametresinin kullanımı 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
Başlatma, hata ayıklama ve Işlem bekleme
Windows PowerShell ayrıca cmdlet 'leri başlatmak (veya yeniden başlatmak), bir işlemde hata ayıklamak ve bir komutu çalıştırmadan önce işlemin tamamlanmasını beklemek için de gelir. Bu cmdlet 'ler hakkında daha fazla bilgi için, her cmdlet için cmdlet yardım konusuna bakın.