在 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
我有多个网站 - 每个网站都在一个单独的应用程序池中。 我指的应用程序池有 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