我正在尝试使用 WebAdministration 模块在 PowerShell 中编写一些 IIS7 设置任务脚本。我擅长设置简单的属性,但在处理配置文件中的元素集合时遇到了一些麻烦。
举个直接的例子,我希望应用程序池按照给定的时间表回收,时间表是时间的集合。当我通过 IIS 管理控制台进行设置时,相关的配置部分如下所示:
<add name="CVSupportAppPool">
<recycling>
<periodicRestart memory="1024" time="00:00:00">
<schedule>
<clear />
<add value="03:31:00" />
</schedule>
</periodicRestart>
</recycling>
</add>
在我的脚本中我希望能够完成同样的事情,我有以下两行:
#clear any pre-existing schedule
Clear-WebConfiguration "/system.applicationHost/applicationPools/add[@name='$($appPool.Name)']/recycling/periodicRestart/schedule"
#add the new schedule
Add-WebConfiguration "/system.applicationHost/applicationPools/add[@name='$($appPool.Name)']/recycling/periodicRestart/schedule" -value (New-TimeSpan -h 3 -m 31)
确实如此几乎同样的事情,但生成的 XML 缺少<clear/>
通过 GUI 创建的元素,我认为这对于避免继承任何默认值是必要的。
这种收集(包含“添加”、“删除”和“清除”元素)在配置文件中似乎相当标准,但我似乎找不到任何关于如何与它们一致交互的良好文档。
答案1
不要使用 Clear-WebConfiguration,而要使用 Remove-WebConfigurationProperty:
Remove-WebConfigurationProperty -pspath 'MACHINE/WEBROOT/APPHOST' -filter "system.applicationHost/applicationPools/add[@name='$($appPool.Name)']/recycling/periodicRestart/schedule" -name "."
这将在 <schedule> 中添加 <clear /> 节点