【问题标题】:kill IIS worker process by sitename按站点名称杀死 IIS 工作进程
【发布时间】:2014-07-16 17:17:51
【问题描述】:

对于这个问题,“站点名称”= IIS 所称的站点名称。例如,输出:

ls IIS:\Sites\ | select Name

给定一个包含这些站点名称的文本文件,我想遍历所有正在运行的 w3wp.exe 进程,然后终止(不是回收,终止)所有与列表中的站点名称无关的 w3wp.exe 进程。 (我的列表不是 ls IIS:\Sites\ | select Name btw 的输出,这只是定义我们所称的“站点名称”的示例。我的列表是应该是的站点名称列表 em> 在服务器上运行,手动创建)

我可以杀死所有 w3wp.exe 的

taskkill /IM w3wp.exe /F

但我正在努力在 IIS 站点名称及其关联的工作进程之间建立连接,以便我可以根据站点名称终止特定的工作进程。我猜我需要去 siteName>appPool>worker process...但是我很难。

【问题讨论】:

标签: powershell iis


【解决方案1】:
$workerProcesses = Get-CimInstance Win32_Process -Filter "name='w3wp.exe'"
foreach ($workerProcess in $workerProcesses)
{
    $wpSiteName = $workerProcess.CommandLine.split(" ")[2].replace("`"","")
    $wpPID = $workerProcess.ProcessId

    if ($myListNotShownHere -notcontains $wpSiteName)
    {
        #taskkill /f /pid $wpPID   
    }
}

【讨论】:

    【解决方案2】:

    您也可以停止站点,而不是终止工作进程。这对性能更友好,因为无需终止和重新启动进程。

    正如@Eris 已经评论的那样,您可以使用 WebAdministration 模块来做到这一点:

    Import-Module WebAdministration
    Stop-Website -Name "MySite"
    

    您需要以提升的状态运行 PowerShell 才能使用 WebAdministration 模块。

    如果您真的必须杀死工作进程,请在此处查看 stej 的回答:How to get IIS AppPool Worker Process ID

    【讨论】:

      猜你喜欢
      • 2011-02-25
      • 2011-06-19
      • 1970-01-01
      • 2017-10-02
      • 1970-01-01
      • 1970-01-01
      • 2017-01-21
      • 2018-02-28
      • 1970-01-01
      相关资源
      最近更新 更多