如何获取IIS AppPool工作进程ID

yak*_*atz 23 iis powershell automation

我有一个PowerShell脚本,当我们的监控服务检测到网站关闭时,该脚本会自动运行.它应该停止AppPool(使用Stop-WebAppPool -name $AppPool;),等到它真的停止然后重新启动它.

有时它的过程实际上并没有停止,表现为错误

Cannot Start Application Pool:  
The service cannot accept control messages at this time.
(Exception from HRESULT: 0x80070425)"
Run Code Online (Sandbox Code Playgroud)

当你试图再次启动它.

如果停止花费的时间超过一定的秒数(我会在经过多次停留以查看通常需要多长时间后选择那段时间),我想要终止这个过程.

我知道我可以通过这样做获取AppPool中工作人员使用的进程列表dir IIS:\AppPools\MyAppPool\WorkerProcesses\,

Process ID  State      Handles  Start Time
----------  -----      -------  ----------
7124        Running
Run Code Online (Sandbox Code Playgroud)

但我无法弄清楚如何实际捕获进程ID,所以我可以杀死它.

ste*_*tej 32

如果进程ID确实是要杀死的进程的id,您可以:

$id = dir IIS:\AppPools\MyAppPool\WorkerProcesses\ | Select-Object -expand processId
Stop-Process -id $id
Run Code Online (Sandbox Code Playgroud)

要么

dir IIS:\AppPools\MyAppPool\WorkerProcesses\ | % { Stop-Process -id $_.processId }
Run Code Online (Sandbox Code Playgroud)

  • 请记住,IIS:\ provider将缓存workerprocess信息.如果经常重置应用程序池,则进程ID将更改.这还不够. (4认同)
  • @tuxedo25这是我使用的powershell命令:Get-WmiObject -NameSpace'root\WebAdministration'-class'WorkerProcess'-ComputerName'LocalHost'| 选择AppPoolName,ProcessId (4认同)
  • 最初我想使用`Foreach-Object`但是你知道'dir`,我认为你熟悉别名.其他别名可以通过`Get-Alias`找到:) (3认同)

小智 13

在服务器上的命令提示符中,我只是执行以下操作以获取正在运行的AppPool PID的列表,因此我可以使用taskkill或Task Mgr将其终止:

cd c:\windows\system32\inetsrv
appcmd list wp
Run Code Online (Sandbox Code Playgroud)

taskkill /f /pid *PIDhere*
Run Code Online (Sandbox Code Playgroud)

  • `.\appcmd 列表 wp` (2认同)

Gre*_*ray 8

(从罗马的评论中添加答案,因为stej的解决方案可能存在缓存问题)

在Web服务器上以管理员身份打开Powershell,然后运行:

gwmi -NS 'root\WebAdministration' -class 'WorkerProcess' | select AppPoolName,ProcessId 
Run Code Online (Sandbox Code Playgroud)

你应该看到类似的东西:

AppPoolName ProcessId
----------- ---------
AppPool_1        8020
AppPool_2        8568
Run Code Online (Sandbox Code Playgroud)

然后,您可以使用任务管理器将其终止或在Powershell中使用:

Stop-Process -Id xxxx
Run Code Online (Sandbox Code Playgroud)

如果你得到Get-WmiObject:无法从命名空间root/WebAdministration获取对象.无效的命名空间,然后您需要使用以下命令启用IIS管理脚本和工具功能:

ipmo ServerManager
Add-WindowsFeature Web-Scripting-Tools
Run Code Online (Sandbox Code Playgroud)