在 PowerShell returns 值中获取特定应用程序池的工作进程,但进程已停止

Getting specific app pool's worker process in PowerShell returns value but process is already stopped

我有多个网站 - 每个网站都在一个单独的应用程序池中。 我指的应用程序池有 1 个工作进程。 停止应用程序池后,我试图等待并验证工作进程是否已停止。

$appPoolName = $appPool.name;
    
    Write-Host "appPoolName: $appPoolName";

    $w3wp = Get-ChildItem "IIS:\AppPools$appPoolName\WorkerProcesses\";

    while($w3wp -and $retrys -gt 0)
    {
        Write-Host "w3wp value is: $w3wp";

        Start-Sleep -s 10;
        $retrys--;
        
        $w3wp = Get-ChildItem "IIS:\AppPools$appPoolName\WorkerProcesses\";

        Write-Host "w3wp value(2) is: $w3wp";

        if(-not $w3wp)
        {
            break;
        }
    }

这两个值的打印始终是“Microsoft.IIs.PowerShell.Framework.ConfigurationElement”,即使我看到进程已停止并且不再在任务管理器中也是如此。

也很奇怪:当我在代码运行时打开另一个 PowerShell 会话并调用

 $w3wp = Get-ChildItem "IIS:\AppPools$appPoolName\WorkerProcesses\";

w3wp 没有价值(因为它不再存在)。

知道为什么值没有改变吗? 或者如何以不同的方式做到这一点?

提前致谢:)

我认为 IIS: 提供程序正在缓存数据。我不知道修复方法,但这里有几个替代方案:

从 powershell 使用 WMI: gwmi -NS 'root\WebAdministration' -class 'WorkerProcess' | select AppPoolName,ProcessId

运行 appcmd appcmd list wp