Powershell App Pool 设置 periodicRestart 语法

Powershell App Pool set periodicRestart syntax

我正在尝试使用 powershell 脚本设置 periodicRestart 属性,但我正在尝试使用与我在代码示例中看到的略有不同的语法。

根据Set the specific times to recycle an application pool with PowerShell,这是一种方法:

Clear-ItemProperty $iisAppPoolName -Name Recycling.periodicRestart.schedule
Set-ItemProperty   $iisAppPoolName -Name Recycling.periodicRestart.schedule `
                                   -Value @{value="01:00:00"}

但是,我已经有一段代码,我在其中设置 $appPool 本身的属性,如下所示:

$appPool = New-WebAppPool $iisAppPoolName 
$appPool.managedPipelineMode = "Classic"
$appPool.managedRuntimeVersion = "c4.0"
$appPool.recycling.periodicRestart.time = [TimeSpan]"00:00:00"
$appPool | Set-Item

效果很好,所以我想添加以下行:

$appPool.recycling.periodicRestart.schedule = @{value="01:00:00"}

但我无法获取 @{value="01:00:00"} 的语法。 schedule 属性 需要一个哈希表,这就是我传递给它的内容。

有什么想法吗?

有趣的是,您将其视为 [Hashtable]。我将其视为 [Microsoft.Iis.Powershell.Framework.ConfigurationElement].

它有一个名为 .UpdateCollection() 的方法,它需要一个 [PSObject[]],所以它正在寻找一个对象数组。

问题是,调用该方法,无论是在从 New-WebAppPool 还是从 Get-Item IIS:\AppPools\ExistingPool 返回的池对象上,都会导致一个错误,指出它是只读的。

我尝试用添加了时间跨度对象的新数组列表替换整个 .Collection,我没有收到任何错误,但它没有设置值。

我也尝试创建一个 ConfigurationElement 对象,但它似乎没有构造函数,所以它可能是代码中某处的私有 class。

我并不是说绝对没有办法按照你的意愿去做,但看起来你最好只使用Set-ItemProperty似乎其中一些属性只能通过 PS 提供程序进行更新。