通过sitename杀死IIS工作进程

时间:2014-07-16 17:17:51

标签: powershell iis

对于这个问题,“网站名称”= IIS称之为网站名称。 E.G,输出:

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>工作流程......但是我很难过。

2 个答案:

答案 0 :(得分:0)

$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   
    }
}

答案 1 :(得分:0)

您也可以停止该网站,而不是杀死工作进程。这对性能更友好,因为不必杀死和重新启动任何进程。

正如@Eris已经评论过的,您可以使用WebAdministration模块执行此操作:

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

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

如果确实必须终止工作进程,请参阅此处的stej答案:How to get IIS AppPool Worker Process ID