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

Я пытаюсь настроить пулы приложений на повторную загрузку несколько раз в день в iis 8.5, я пытался использовать powershell и команду приложения, и при тестировании на сервере, на котором нет сайтов / приложений в пуле, похоже, что он работает отлично, однако, при попытке установить любой из методов на сервере, на котором есть сайты в пулах приложений, я вижу странное поведение, однако, похоже, что он работает в GUI 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

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

, однако запрашивает значение, показывающее оба раза:

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, но нашел те же результаты, отлично работает на сервере без сайтов в пуле приложений, но при работе с серверами с сайтами, пропускающими один из случаев в gui, запрос показывает оба раза. Я включил вход для повторов пулов приложений, чтобы подтвердить, что это происходит в обоих случаях, но мне интересно, не вижу ли я просто что-то очевидное.

Сценарий 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

1 Ответ

0 голосов
/ 23 января 2020

Я попробовал ваш скрипт 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

enter image description here

или

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

или

 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 сервер 2012r2)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...