如何设置IIS应用程序池的回收时间,而无需使用Add-WebConfiguration的丑陋语法?

Modified on: Sun, 01 Sep 2019 15:40:03 +0800

我一直在编写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

相关问答

添加新评论