You need to enable JavaScript to run this app. 如何在PowerShell脚本中关联WebRequest与IIS工作进程PID
优惠活动
大模型
产品
解决方案
定价
更多

如何在PowerShell脚本中关联WebRequest与IIS工作进程PID

PowerShell获取IIS请求对应工作进程PID的解决方案

方法1:直接读取Get-WebRequest内置属性

你当前使用的Get-WebRequest返回的请求对象本身就包含对应工作进程的ID字段WorkerProcessId,无需额外做关联映射,直接在筛选后输出该字段即可:

# 筛选testpool中运行超过100秒的请求,同时输出对应工作进程PID
Get-WebRequest -AppPool "testpool" | Where-Object {$_.timeElapsed -gt 100000} | Select-Object url,timeElapsed,WorkerProcessId,ClientIPAddress,HostName

输出结果中的WorkerProcessId就是对应w3wp进程的PID,可直接和你获取的应用池工作进程PID列表匹配。

方法2:IISAdministration模块兼容方案(适用于Win10/Server2016及以上版本)

如果使用的是新版IISAdministration模块,可直接遍历应用池下的工作进程,逐个拉取进程内的请求,天然绑定PID:

Import-Module IISAdministration
# 定位目标应用池
$targetPool = Get-IISAppPool -Name "testpool"
# 遍历所有工作进程,筛选超时请求并关联PID
$timeoutRequests = foreach ($workerProc in $targetPool.WorkerProcesses) {
    $workerProc.GetRequests() | Where-Object {$_.TimeElapsed -gt 100000} | Select-Object `
        Url,TimeElapsed,@{Name='ProcessId';Expression={$workerProc.ProcessId}},ClientIPAddress
}
# 输出结果
$timeoutRequests

注意:以上命令均需要以管理员身份运行PowerShell,且系统已安装IIS对应的「管理脚本和工具」功能。

校验PID对应关系(可选)

如果需要验证PID对应的w3wp进程确实归属目标应用池,可执行以下命令:

Get-Process -Name w3wp | Select-Object Id,@{Name='AppPoolName';Expression={
    (Get-CimInstance Win32_Process -Filter "ProcessId = $($_.Id)").CommandLine.Split(' ')[-1]
}} | Where-Object AppPoolName -eq "testpool"

内容的提问来源于stack exchange,提问作者manydoubts

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.20 06:36:04