2009-02-26 139 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