İş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.

Ayrıca Bkz.