Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Ez a minta csak a Windows PowerShell 5.1-et érinti.
A PowerShell Folyamat parancsmagjaival helyi és távoli folyamatokat kezelhet a PowerShellben.
Folyamatok lekérése
A helyi számítógépen futó folyamatok futtatásához futtasson egy Get-Process paraméterek nélkül.
Az egyes folyamatokat a folyamatnevek vagy a folyamatazonosítók megadásával szerezheti be. A következő parancs lekéri az Idling folyamatot.
Get-Process -Id 0
Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName
------- ------ ----- ----- ----- ------ -- -----------
0 0 0 16 0 0 Idle
Bár bizonyos helyzetekben a parancsmagok nem adnak vissza adatokat, amikor egy folyamatot a ProcessId-el ad meg, a Get-Process hibaüzenetet ad, ha nem talál egyezést, mert általában egy ismert futó folyamat lekérése a cél. Ha nincs folyamat ezzel az azonosítóval, valószínű, hogy az azonosító helytelen, vagy hogy az érdeklődésre számot tartó folyamat már véget ért.
Get-Process -Id 99
Get-Process : No process with process ID 99 was found.
At line:1 char:12
+ Get-Process <<<< -Id 99
A Get-Process parancsmag Név paraméterével megadhatja a folyamatok egy részhalmazát a folyamat neve alapján. A Név paraméter több nevet is felvehet egy vesszővel tagolt listában, és támogatja a helyettesítő karakterek használatát, így beírhatja a névmintákat.
A következő parancs például olyan folyamatot kap, amelynek a neve "ex" betűvel kezdődik.
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
Mivel a .NET System.Diagnostics.Process osztály a PowerShell-folyamatok alapja, az System.Diagnostics.Processáltal használt konvenciók némelyikét követi. Ezen konvenciók egyike, hogy a végrehajtható fájlok folyamatának neve soha nem tartalmazza a végrehajtható név végén található .exe.
Get-Process a Név paraméterhez több értéket is elfogad.
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
A Get-Process ComputerName paraméterével lekérheti a folyamatokat a távoli számítógépeken. Az alábbi parancs például lekéri a PowerShell-folyamatokat a helyi számítógépen (amelyet a "localhost" képvisel) és két távoli számítógépen.
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
A számítógépnevek ebben a megjelenítésben nem egyértelműek, de a Get-Process visszaadott folyamatobjektumok MachineName tulajdonságában vannak tárolva. Az alábbi parancs a Format-Table parancsmaggal jeleníti meg a folyamat azonosító, ProcessName és MachineName (ComputerName) tulajdonságát.
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
Ez az összetettebb parancs hozzáadja a MachineName tulajdonságot a szabványos Get-Process megjelenítéshez.
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
Folyamatok leállítása
A PowerShell rugalmasan listázza a folyamatokat, de mi a helyzet egy folyamat leállításával?
A Stop-Process parancsmag egy nevet vagy azonosítót használ a leállítandó folyamat megadásához. A folyamatok leállításának lehetősége az ön engedélyétől függ. Egyes folyamatok nem állíthatók le. Ha például megpróbálja leállítani a tétlen folyamatot, hibát kap.
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
A Megerősítés paraméterrel is kényszerítheti a kérést. Ez a paraméter különösen akkor hasznos, ha helyettesítő karaktert használ a folyamatnév megadásakor, mert előfordulhat, hogy véletlenül megfelel bizonyos folyamatoknak, amelyeket nem szeretne leállítani:
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
Összetett folyamatkezelés az objektumszűrési parancsmagok némelyikével lehetséges. Mivel egy folyamatobjektumnak van egy Válasz tulajdonsága, amely akkor igaz, ha már nem válaszol, az összes nem válaszoló alkalmazást a következő paranccsal állíthatja le:
Get-Process | Where-Object -FilterScript {$_.Responding -eq $false} | Stop-Process
Ezt a megközelítést más helyzetekben is használhatja. Tegyük fel például, hogy egy másodlagos értesítési terület alkalmazás automatikusan fut, amikor a felhasználók elindítanak egy másik alkalmazást. Előfordulhat, hogy ez nem működik megfelelően a Terminálszolgáltatások munkamenetekben, de továbbra is a fizikai számítógép konzolján futó munkamenetekben szeretné tartani. A fizikai számítógép asztalához csatlakoztatott munkamenetek mindig 0 munkamenet-azonosítóval rendelkeznek, így a folyamat minden más munkamenetben lévő példányát leállíthatja a Where-Object és a folyamat használatával, SessionId:
Get-Process -Name BadApp | Where-Object -FilterScript {$_.SessionId -neq 0} | Stop-Process
A Stop-Process parancsmag nem rendelkezik ComputerName paraméterrel. Ezért a leállítási folyamat parancs távoli számítógépen való futtatásához a Invoke-Command parancsmagot kell használnia. Ha például le szeretné állítani a PowerShell-folyamatot a Server01 távoli számítógépen, írja be a következőt:
Invoke-Command -ComputerName Server01 {Stop-Process PowerShell}
Az összes többi PowerShell-munkamenet leállítása
Időnként hasznos lehet leállítani az összes futó PowerShell-munkamenetet az aktuális munkameneten kívül. Ha egy munkamenet túl sok erőforrást használ, vagy nem érhető el (lehet, hogy távolról vagy egy másik asztali munkamenetben fut), előfordulhat, hogy nem tudja közvetlenül leállítani. Ha azonban megpróbálja leállítani az összes futó munkamenetet, előfordulhat, hogy az aktuális munkamenet leáll.
Minden PowerShell-munkamenet rendelkezik egy PID környezeti változóval, amely tartalmazza a Windows PowerShell-folyamat azonosítóját. Ellenőrizheti a $PID az egyes munkamenetek azonosítójával, és csak olyan Windows PowerShell-munkameneteket állíthat le, amelyek más azonosítóval rendelkeznek. A következő folyamatparancs ezt teszi, és visszaadja a leállított munkamenetek listáját (a PassThru paraméter használata miatt):
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
Folyamatok indítása, hibakeresése és várakozás a folyamatokra
A PowerShell emellett parancsmagokkal is rendelkezik, hogy elindítsa (vagy újraindítsa), hibakeresést végezzen egy folyamaton, és várjon, amíg a folyamat befejeződik egy parancs futtatása előtt. Ezekről a parancsmagokról további információt az egyes parancsmagok súgótémakörében talál.