IIS应用程序池PID
是否有人熟悉一种获取与进程ID关联的应用程序池的方法? 我正在使用Win32_Process来查询W3WP服务,并返回PID,现在我正在尝试获取与之关联的应用程序池。
如果您只是使用命令行进行特殊设置,您也可以这样做:
该脚本已经放置在Windows Server 2003的systemroot \ system32中,所以只需进入命令提示符并inputiisapp.vbs(.vbs是可选的),即可获得所有App Pool信息的即时列表一直想知道。 如果CScript不是您的默认WSH脚本主机,则可能需要键入cscript iisapp.vbs。
我们来看一个输出的例子:
W3WP.exe PID: 1468 AppPoolId: AppPoolForSite1.com W3WP.exe PID: 3056 AppPoolId: AppPoolForSite2.com W3WP.exe PID: 1316 AppPoolId: AppPoolForSite3.com
直接从马的口中,微软certificate了这一点 。
在Windows Server 2008上,这已经改变了。
在systemroot \ system32 \ inetsrv中findappcmd.exe
运用
appcmd列表wp
你得到了所有工作进程和他们正在服务的应用程序的列表。
如果您在Windows Server 2008上运行,并且只希望将PID提供给另一个脚本或命令,则可以使用以下命令:
c:\windows\system32\inetsrv\appcmd list wps /apppool.name:"My Application Pool" /text:WP.NAME
例如,要创build一个创build特定应用程序池的内存转储的批处理脚本,请使用以下命令:
c:\windows\system32\inetsrv\appcmd list wps /apppool.name:"My Application Pool" /text:WP.NAME > "%temp%\pid.txt" for /F %%a in (%temp%\pid.txt) do c:\debugger\adplus.exe -hang -od:\dumps -p %%a pause
我刚刚发现,您也可以在IIS的用户界面中find它。select您的Web服务器节点并打开“工作进程”。 这将显示每个应用程序池的名称以及其进程ID和利用率详细信息。
ServerManager serverManager = new ServerManager(); ApplicationPoolCollection applicationPoolCollection = serverManager.ApplicationPools;
尝试这个工作,它应该得到你所需要的。
您可以使用任务pipe理器来查看进程运行的用户名(通常与应用程序池名称相同)和进程ID,但是您必须在任务pipe理器中打开这些列,并且还假设进程所运行的用户名与应用程序池名称相同(据我所知,这是默认的,除非使用Sharepoint等)。
另外请注意,此页面中列出的所有方法可能只显示当前正在运行的进程,这意味着如果您的特定进程由于空闲时间而closures,则必须先使用该站点才能将进程置于列表中,在你的情况下,这意味着你应该首先访问所有网站,以确保与他们相关的进程正在运行。
打开IISpipe理器(运行> Inetmgr),从左侧站点导航树中select根级别,然后从“function视图”面板中select“工作进程”
点击“工作进程”获取当前正在运行的所有工作进程的详细信息
从这个列表中您将获得应用程序池名称,进程ID
PID和应用程序池的名称:
$AppPoolName = 'AppPoolForSite1' (Get-ItemProperty IIS:\AppPools\$AppPoolName -Name WorkerProcesses).Collection.processId
这应该做到这一点。
public string getAppPoolName(int pid) { ServerManager serverManager = new ServerManager(); ApplicationPoolCollection apc = serverManager.ApplicationPools; foreach (var app in apc) { var workers = app.WorkerProcesses; foreach (var w in workers) { if (w.ProcessId == pid) { return app.Name; } } } return string.Empty; }