繁体   English   中英

如何获取 IIS AppPool 工作进程 ID

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM