【问题标题】:How to get IIS AppPool Worker Process ID如何获取 IIS AppPool 工作进程 ID
【发布时间】:2011-10-24 06:42:21
【问题描述】:

我有一个 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,以便我可以杀死它。

【问题讨论】:

  • 您使用的是什么操作系统?我在 Windows 7 上看不到该选项
  • 其实我刚刚意识到我需要在Win7盒子上做以下事情:import-module WebAdministration
  • Server 2008 R2 Web。我不记得我是否必须手动导入该模块。
  • 我刚刚检查过了。您必须在 Server 2008 R2 下导入模块。

标签: iis powershell automation


【解决方案1】:

如果进程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 }

【讨论】:

  • 我希望我能投票两次。我不知道foreach-object% 快捷方式。
  • 本来我想用Foreach-Object,但你知道dir,我以为你对别名很熟悉。其他别名可以通过Get-Alias 找到:)
  • 我已经知道其中一些,因为它们与 dos/bash 相同。完整的列表很棒。
  • 请记住,IIS:\ 提供程序将缓存工作进程信息。如果您的应用程序池经常被重置,进程 ID 将会改变。这还不够。
  • @tuxedo25 这是我使用的 powershell 命令:Get-WmiObject -NameSpace 'root\WebAdministration' -class 'WorkerProcess' -ComputerName 'LocalHost' |选择 AppPoolName, ProcessId
【解决方案2】:

在服务器上的命令提示符中,我只需对正在运行的 AppPool PID 列表执行以下操作,以便我可以使用 taskkill 或 Task Mgr 杀死它们:

cd c:\windows\system32\inetsrv
appcmd list wp

taskkill /f /pid *PIDhere*

【讨论】:

  • PandaCookie 提供的命令非常适合识别与每个网站关联的 IIS 工作进程,因此如果您在网络服务器上遇到问题时不必全部杀死它们。您可以识别正确的一个并仅结束那个。
  • .\appcmd list wp
【解决方案3】:

(从 Roman 的评论中添加答案,因为 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

【讨论】:

  • 好的,但是如何将“AppPool_1”的 PID 放入一个变量中,我可以用它来批量终止该进程?
猜你喜欢
  • 1970-01-01
  • 2015-10-09
  • 2020-03-09
  • 1970-01-01
  • 2010-09-08
  • 2011-06-29
  • 2013-07-08
  • 2019-04-06
  • 2010-12-03
相关资源
最近更新 更多