2009-02-26 110 views
3

它看起来像一个最近的Windows更新已经打破了我用来回收IIS6应用程序池的一些功能,因为这直到今天一直工作数月。使用PowerShell回收IIS应用程序池:“异常调用回收”

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" 
     } 
} 

的问题是什么任何想法,我应该怎么处理这个?

+0

它看起来像$ pool对象可能为空,所以它必须是我如何选择应用程序池对象的问题 – 2009-02-26 12:59:50

回答

2

一个应用程序池的停止,这是造成错误。其他应用程序池可以很好地回收。上面的代码可以用于其他人。

1

您可以尝试使用ADSI回收:

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

尝试此方法,抛出一个错误: 异常调用“调用”与“2”参数s):“异常已被调用的目标引起 ”。 在D:\ scripts \ deployment \ inc \ deploy.ps1:124 char:28 + $ pool.psbase.invoke(<<<<“recycle”) – 2009-02-26 14:18:53

3

原来的问题是为IIS6,但我跑进使用WebAdministration模块的重启WebAppPool在Windows 2012所以我放弃了回调用APPCMD类似的东西,并能正常工作:

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

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

+0

感谢Bewc,没有意识到这是可能的。更直接。 – 2013-12-12 11:21:26

相关问题