使用PowerShell回收IIS应用程序池:“异常调用回收”

时间:2009-02-26 11:11:45

标签: winapi powershell iis-6 wmi application-pool

看起来最近的Windows更新破坏了我用来回收IIS6应用程序池的一些功能,因为它已经工作了几个月到今天。

Exception calling "Recycle" : "Win32: The object identifier does not representException calling "Recycle" : "Win32: The object identifier does not represent a valid object.

我用来回收应用程序池的函数是:

function recycle-pool($strServerName)
{
    $objWMI = [WmiSearcher] "Select * From IIsApplicationPool"
    $objWMI.Scope.Path = "\\" + $strServerName + "\root\microsoftiisv2"
    $objWMI.Scope.Options.Authentication = 6
    $pools = $objWMI.Get()
    foreach ($pool in $pools)
    {
        $pool.recycle()
        if (!$?)
        {
            Write-Host $pool.name " - ERROR"
        }
        else
        {
            Write-Host $pool.name " - Recycled"
        }
}

对问题是什么以及如何处理这个问题有任何想法?

3 个答案:

答案 0 :(得分:3)

最初的问题是针对IIS6,但我在Windows 2012上使用WebAdministration模块的Restart-WebAppPool遇到了类似的问题。所以我退回到调用AppCMD,这很好用:

& $env:windir\system32\inetsrv\appcmd recycle apppool "YOURAPPPOOLNAMEHERE"

有时,您不必过度设计解决方案。希望有一天能帮助别人。

答案 1 :(得分:2)

其中一个应用程序池已停止,导致错误。其他应用程序池回收正常。上面的代码可以用于其他任何人。

答案 2 :(得分:1)

您可以尝试使用ADSI进行回收:

$server = "IIsServerName"  
$iis = [adsi]"IIS://$server/W3SVC/AppPools"  
$iis.psbase.children | foreach {  
    $pool = [adsi]($_.psbase.path)   
    $pool.psbase.invoke("recycle")  
}