如何在不借助 Add-WebConfiguration 丑陋语法的情况下设置 IIS 应用程序池回收时间?

如何在不借助 Add-WebConfiguration 丑陋语法的情况下设置 IIS 应用程序池回收时间?

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

我已经看到过很多不同的方法来实现这一点,这些方法都不那么简洁,我喜欢这种设置对象属性的语法,与我在科技网

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() 函数,而且我还没有找到任何其他方法来修改它。

是否有人知道如何使用与我上面写的代码一致的语法来设置计划的回收时间?

答案1

我一直无法弄清楚如何在对象本身上设置它,但在创建它之后,以下工作:

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

答案2

因此不仅仅是

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

那么?或者是 TimeSpan 的 ToString 等效项?

(我不知道 PowerShell;只是根据您的其他部分进行语法猜测)。

相关内容