Настройка пулов приложений для перезапуска в определенное время с помощью powershell или appcmd не отображается оба раза в GUI/IIS

Я пытаюсь настроить пулы приложений для повторного использования несколько раз в день в iis 8.5, я пытался использовать команду powershell и app, и при тестировании на сервере, на котором нет сайтов/приложений в пуле, кажется, работает отлично, однако при попытке установить любой метод на сервере с сайтами в пулах приложений я наблюдаю странное поведение. Кажется, он работает, однако в графическом интерфейсе IIS, если я смотрю на настройки повторного использования пула приложений, он показывает только один из указанные времена. Сценарий Powershell, который изначально пытались использовать, выглядит следующим образом:

function Set-ApplicationPoolRecycleTimes {
    param (
        [string]$ApplicationPoolName,
        [string[]]$RestartTimes
    )
    Import-Module WebAdministration
    Write-Output "Updating recycle times for $ApplicationPoolName"
    # Delete all existing recycle times
    Clear-ItemProperty IIS:\AppPools\$ApplicationPoolName -Name Recycling.periodicRestart.schedule    
    Clear-ItemProperty IIS:\AppPools\$ApplicationPoolName -Name Recycling.periodicRestart.time
    foreach ($restartTime in $RestartTimes) {
        Write-Output "Adding recycle at $restartTime"
        # Set the application pool to restart at the time we want
        New-ItemProperty -Path "IIS:\AppPools\$ApplicationPoolName" -Name Recycling.periodicRestart.schedule -Value @{value=$restartTime}
        Set-ItemProperty -Path "IIS:\AppPools\$ApplicationPoolName" -Name Recycling.periodicRestart.time -Value "00:00:00"
    } # End foreach restarttime
} # End function Set-ApplicationPoolRecycleTimes
$apppoolname1 = "app pool's name"
$restartat = @("1:45", "18:45")
Set-ApplicationPoolRecycleTimes -ApplicationPoolName $apppoolname1 -RestartTimes $restartat

Опять же, это работает отлично, если в пуле приложений нет сайтов. Когда сайты существуют, это работает, за исключением того, что графический интерфейс показывает только одно из установленных значений времени: введите здесь описание изображения

однако запрос значения показывает оба раза:

Import-Module WebAdministration
(Get-ItemProperty ('IIS:\AppPools\app pool name') -Name Recycling.periodicRestart.schedule.collection) | select value

value   
-----   
18:45:00
01:45:00

также попытался использовать appcmd, но обнаружил те же результаты, отлично работает на сервере без сайтов в пуле приложений, но при запуске на серверах с сайтами отсутствует одно время в графическом интерфейсе, запросы показывают оба раза. Я включил вход в систему для повторного использования пула приложений, чтобы подтвердить, что это происходит в оба раза, но мне интересно, не упускаю ли я из виду что-то очевидное.

скрипт appcmd:

CD C:\windows\System32\inetsrv
$V1 = "app pool name"
#clears any existing schedule
cmd.exe /c appcmd.exe set apppool /apppool.name: $V1 /-recycling.periodicRestart.schedule
#setting desired recycles 
cmd.exe /c appcmd.exe set config -section:system.applicationHost/applicationPools /+"[name='$v1'].recycling.periodicRestart.schedule.[value='01:45:00']" /commit:apphost
cmd.exe /c appcmd.exe set config -section:system.applicationHost/applicationPools /+"[name='$v1'].recycling.periodicRestart.schedule.[value='18:45:00']" /commit:apphost

person Shortbus    schedule 22.01.2020    source источник
comment
Для меня (у меня был один сайт в пуле) это запрос, и парень показывает оба времени. При этом я использовал -Value $restartTime вместо -Value @{value=$restartTime}, так как последний выдал мне ошибку (неверное приведение). Боюсь, я не могу воспроизвести ваше поведение, но опять же я тестировал только на своей рабочей станции (Windows 10), так что это может быть частью проблема...   -  person Sage Pourpre    schedule 23.01.2020


Ответы (1)


Я попробовал ваш сценарий PowerShell с пулом приложений, который содержит сайт или без него. В обоих случаях ваш опубликованный сценарий работает.

вы можете попробовать использовать следующий скрипт:

    function Set-ApplicationPoolRecycleTimes {

    param (
        [string]$ApplicationPoolName,
        [string[]]$RestartTimes
    )

    Import-Module WebAdministration

    Write-Output "Updating recycle times for $ApplicationPoolName"

    # Delete all existing recycle times
    Clear-ItemProperty IIS:\AppPools\$ApplicationPoolName -Name Recycling.periodicRestart.schedule

    foreach ($restartTime in $RestartTimes) {

        Write-Output "Adding recycle at $restartTime"
        # Set the application pool to restart at the time we want
        New-ItemProperty -Path "IIS:\AppPools\$ApplicationPoolName" -Name Recycling.periodicRestart.schedule -Value @{value=$restartTime}

    } # End foreach restarttime

} # End function Set-ApplicationPoolRecycleTimes
$apppoolname = "abcsite"
$restartat = @("05:55", "12:55", "17:00")

Set-ApplicationPoolRecycleTimes -ApplicationPoolName $apppoolname -RestartTimes $restartat

введите здесь описание изображения

or

appcmd.exe set config  -section:system.applicationHost/applicationPools /+"[name='test1'].recycling.periodicRestart.schedule.[value='07:00:00']" /commit:apphost

    appcmd.exe set config  -section:system.applicationHost/applicationPools /+"[name='test1'].recycling.periodicRestart.schedule.[value='18:25:00']" /commit:apphost

or

 Add-WebConfigurationProperty -pspath 'MACHINE/WEBROOT/APPHOST'  -filter "system.applicationHost/applicationPools/add[@name='test1']/recycling/periodicRestart/schedule" -name "." -value @{value='07:00:00'}

Add-WebConfigurationProperty -pspath 'MACHINE/WEBROOT/APPHOST'  -filter "system.applicationHost/applicationPools/add[@name='test1']/recycling/periodicRestart/schedule" -name "." -value @{value='18:25:00'}

Приведенные выше сценарии протестированы с IIS 10 (Windows 10) и IIS 8.5 (windows server 2012r2).

person Jalpa Panchal    schedule 23.01.2020