对于这个问题,“网站名称”= IIS称之为网站名称。 E.G,输出:
ls IIS:\Sites\ | select Name
给定一个包含这些站点名称的文本文件,我想遍历所有正在运行的w3wp.exe进程,然后杀死(不回收,终止)与列表中的站点名称无关的所有w3wp.exe进程。 (我的列表不是ls IIS的输出:\ Sites \ | select Name btw,这只是一个定义我们称之为“站点名称”的示例。我的列表是应该>的站点名称列表em>在服务器上运行,手动创建)
我可以用
杀死所有w3wp.exetaskkill /IM w3wp.exe /F
但是我很难在IIS站点名称及其关联的工作进程之间建立连接,因此我可以根据站点名称杀死特定的站点名称。我猜我需要去siteName> appPool>工作流程......但是我很难过。
答案 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