Перезапустить пул приложений IIS6 - ошибка ADSI

Не уверен, что, черт возьми, не так! Я использую Powershell 2.0 в Windows 7. Если бы этот же сценарий работал в Windows XP, я просто что-то упустил?

$server = "server1-vm1.prod.ds.russell.com"
$name = "Superduper_Reports"
$iis = [ADSI]"IIS://$server/W3SVC/AppPools/$name"
$iis.psbase.invoke("recycle")

Ошибка (этот вызов мне подходит?):

Exception calling "Invoke" with "2" argument(s): "Unknown error (0x80005000)"
At line:3 char:19
+ $iis.psbase.invoke <<<< ("recycle")
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : DotNetMethodException

Когда я просто запускаю переменную $iis, я получаю эту ошибку:

The following exception occurred while retrieving member "PSComputerName": "Unknown error (0x80005000)"
    + CategoryInfo          : NotSpecified: (:) [format-default], ExtendedTypeSystemException
    + FullyQualifiedErrorId : CatchFromBaseGetMember,Microsoft.PowerShell.Commands.FormatDefaultCommand

Roooarr! Я лучше буду использовать ADSI, а не WMI! Любая помощь? :)


person xbnevan    schedule 14.07.2010    source источник


Ответы (2)


Думаю, для этого можно использовать WebAdministration модуль

Import-Module WebAdministration
Get-Command -Module WebAdministration
Get-ChildItem IIS:

Вы найдете множество командлетов для администрирования IIS и новый диск IIS:

Вы найдете на этом веб-сайте Microsoft Некоторые пояснения.

person JPBlanc    schedule 23.03.2011
comment
Спасибо! Не могли бы вы исправить опечатку в своем фрагменте? добавьте d в Get-ChildItem IIS: - person Sean B; 27.03.2014

В этом вопросе указан сценарий WMI. работать.

В качестве альтернативы эквивалент ADSI мог бы выглядеть примерно так ...

http://geekswithblogs.net/Lance/archive/2010/12/16/powershell-ndash-recycle-all-iis-app-pools.aspx

function Recycle-AppPools {

    param(
    [string] $server = "3bhs001",
    [int] $mode = 1, # ManagedPipelineModes: 0 = integrated, 1 = classic
    ) 

    $iis = [adsi]"IIS://$server/W3SVC/AppPools"
    $iis.psbase.children | %{ 
        $pool = [adsi]($_.psbase.path); 
        if ($pool.AppPoolState -eq 2 -and $pool.ManagedPipelineMode -eq $mode) {
           # AppPoolStates:  1 = starting, 2 = started, 3 = stopping, 4 = stopped          
           $pool.psbase.invoke("recycle") 
        }
   }

}

Однако вы не можете повторно использовать остановленный пул приложений, поэтому вам необходимо проверить это.

person JTew    schedule 23.03.2011