Назад | Перейти на главную страницу

Как я могу установить время перезапуска пула приложений IIS, не прибегая к уродливому синтаксису Add-WebConfiguration?

Я писал сценарий конфигурации нашего экземпляра IIS 7.5 и через биты и кусочки скриптов других народов, которые я придумал, синтаксис мне нравится:

$WebAppPoolUserName = "domain\user"
$WebAppPoolPassword = "password"

$WebAppPoolNames = @("Test","Test2")

ForEach ($WebAppPoolName in $WebAppPoolNames ) {
    $WebAppPool = New-WebAppPool -Name $WebAppPoolName    
    $WebAppPool.processModel.identityType = "SpecificUser"
    $WebAppPool.processModel.username = $WebAppPoolUserName
    $WebAppPool.processModel.password = $WebAppPoolPassword
    $WebAppPool.managedPipelineMode = "Classic"
    $WebAppPool.managedRuntimeVersion = "v4.0"
    $WebAppPool | set-item
}

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

Set-ItemProperty 'IIS:\AppPools\DemoPool' -Name recycling.periodicRestart.requests -Value 100000

Одна вещь, которую я не смог понять, - это как настроить расписания утилизации с использованием этого синтаксиса.

Эта команда устанавливает ApplicationPoolDefaults, но некрасиво:

add-webconfiguration  system.applicationHost/applicationPools/applicationPoolDefaults/recycling/periodicRestart/schedule -value (New-TimeSpan -h 1 -m 30)

Раньше я делал это через appcmd, используя что-то вроде следующего, но мне бы очень хотелось сделать все это через PowerShell:

%appcmd% set apppool "BusinessUserApps" /+recycling.periodicRestart.schedule.[value='01:00:00']

Я пытался:

$WebAppPool.recycling.periodicRestart.schedule = (New-TimeSpan -h 1 -m 30)

Это имеет странный эффект превращения свойства .schedule в временной интервал, пока я не использую $ WebAppPool = get-item iis: \ AppPools \ AppPoolName для обновления переменной.

А также есть $WebappPool.recycling.periodicRestart.schedule.Collection но в коллекции нет функции add (), и я не нашел другого способа ее изменить.

Кто-нибудь знает, как я могу установить запланированное время перезагрузки, используя синтаксис, совместимый с кодом, который я написал выше?

Я никогда не мог понять, как установить это на самом объекте, но после его создания работает следующее:

clear-ItemProperty IIS:\AppPools\MyPoolName -Name Recycling.periodicRestart.schedule #clear values
set-ItemProperty IIS:\AppPools\MyAppPoolName -Name Recycling.periodicRestart.schedule -Value @{value="00:00:00"} #to set it to midnight

Так что не только

$webapppool.recycling.periodicrestart.schedule -Value "01:30:00" 

затем? Или эквивалент ToString TimeSpan?

(Я не PowerShell; просто синтаксическая догадка, основанная на других ваших битах).