我有一个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中的worker所使用的进程列表,
Process ID State Handles Start Time
---------- ----- ------- ----------
7124 Running
型
但是我不知道如何捕获进程id,这样我就可以杀死它。
4条答案
按热度按时间3zwjbxry1#
如果进程ID实际上是要杀死的进程的ID,您可以:
字符串
或
型
lrpiutwd2#
在服务器上的命令提示符下,我只需执行以下操作即可获得正在运行的AppPool PID列表,以便使用taskkill或Task Kill杀死它们:
字符串
型
uxhixvfz3#
(添加Roman评论中的答案,因为stej的解决方案可能存在缓存问题)
在Web服务器上以管理员身份打开Powershell,然后运行:
字符串
你应该看到类似这样的东西:
型
然后,您可以使用任务管理器来杀死它,或者在PowerShell中用途:
型
如果得到Get-WmiObject:Could not get objects from namespace root/WebAdministration. Invalid namespace,则需要使用以下命令启用IIS管理工具和工具功能:
型
w3nuxt5m4#
我也遇到了同样的问题,以下是我的解决方案:
字符串