[英]How to get IIS AppPool Worker Process ID
我有一個 PowerShell 腳本,當我們的監控服務檢測到網站已關閉時,該腳本會自動運行。 它應該停止 AppPool(使用Stop-WebAppPool -name $AppPool;
),等到它真正停止然后重新啟動它。
有時,進程實際上並沒有停止,表現為錯誤
Cannot Start Application Pool:
The service cannot accept control messages at this time.
(Exception from HRESULT: 0x80070425)"
當您嘗試再次啟動它時。
如果停止所需的時間超過一定的秒數(我會在多次停止計時后選擇該時間量以查看通常需要多長時間),我只想終止該進程。
我知道我可以通過執行dir IIS:\AppPools\MyAppPool\WorkerProcesses\
來獲取 AppPool 中工作人員使用的進程列表,
Process ID State Handles Start Time
---------- ----- ------- ----------
7124 Running
但我不知道如何實際捕獲進程ID,以便我可以殺死它。
如果進程 ID 確實是要殺死的進程的 ID,您可以:
$id = dir IIS:\AppPools\MyAppPool\WorkerProcesses\ | Select-Object -expand processId
Stop-Process -id $id
或者
dir IIS:\AppPools\MyAppPool\WorkerProcesses\ | % { Stop-Process -id $_.processId }
在服務器上的命令提示符中,我只需對正在運行的 AppPool PID 列表執行以下操作,以便可以使用 taskkill 或 Task Mgr 殺死它們:
cd c:\windows\system32\inetsrv
appcmd list wp
taskkill /f /pid *PIDhere*
(添加羅馬評論的答案,因為 stej 的解決方案可能存在緩存問題)
在 web 服務器上以管理員身份打開 Powershell,然后運行:
gwmi -NS 'root\WebAdministration' -class 'WorkerProcess' | select AppPoolName,ProcessId
您應該會看到如下內容:
AppPoolName ProcessId
----------- ---------
AppPool_1 8020
AppPool_2 8568
然后,您可以使用任務管理器將其殺死,或者在 Powershell 中使用:
Stop-Process -Id xxxx
如果您得到Get-WmiObject:無法從命名空間根/WebAdministration 獲取對象。 命名空間無效,那么您需要使用以下命令啟用IIS 管理腳本和工具功能:
ipmo ServerManager
Add-WindowsFeature Web-Scripting-Tools
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.