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)
小智 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)
(从罗马的评论中添加答案,因为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)
| 归档时间: |
|
| 查看次数: |
43484 次 |
| 最近记录: |