İş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 bulmazsa bir hata oluşturur. Bu kimliğe sahip bir işlem yoksa, kimliğin yanlış olması veya ilgi alanına ilişkin 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 bir işlem alt kümesi belirtmek için cmdlet'in Name parametresini Get-Process kullanabilirsiniz. Name parametresi virgülle ayrılmış bir listede birden çok ad alabilir ve joker karakterlerin 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 dosyanın sonundaki adı 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 bilgisayarlardaki işlemleri almak için computerName parametresini Get-Process kullanabilirsiniz. Örneğin, aşağıdaki komut yerel bilgisayardaki ("localhost" ile temsil edilen) 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ğini, ProcessName ve MachineName (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?

Stop-Process Cmdlet, durdurmak istediğiniz işlemi belirtmek için bir Ad veya Kimlik alır. İşlemleri durdurabilmek 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 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

Karmaşık işlem işleme, bazı nesne filtreleme cmdlet'leri kullanılarak mümkündür. İşlem nesnesinin yanıt vermediğinde doğru olan bir Responding özelliği 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 her zaman 0 oturum kimliğine sahiptir, böylece ve işlemini kullanarak ve işlemiyle Where-Objectdiğ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 bir durdurma işlemi komutu ç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. Bir 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ını 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.

Ayrıca bkz.