[英]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.