Я пытаюсь написать сценарий некоторых задач настройки IIS7 в PowerShell с помощью модуля WebAdministration. У меня хорошо получается устанавливать простые свойства, но у меня возникают проблемы, когда дело доходит до работы с коллекциями элементов в файлах конфигурации.
В качестве непосредственного примера я хочу, чтобы пулы приложений выполнялись по заданному расписанию, а расписание представляет собой набор времен. Когда я настраиваю это через консоль управления 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/>
элемент, который создается через графический интерфейс, что, как я считаю, необходимо, чтобы избежать наследования значений по умолчанию.
Такой вид коллекции (с элементами «добавить», «удалить» и «очистить») кажется довольно стандартным в файлах конфигурации, но я не могу найти никакой хорошей документации о том, как последовательно с ними взаимодействовать.
Вместо использования Clear-WebConfiguration используйте Remove-WebConfigurationProperty:
Remove-WebConfigurationProperty -pspath 'MACHINE/WEBROOT/APPHOST' -filter "system.applicationHost/applicationPools/add[@name='$($appPool.Name)']/recycling/periodicRestart/schedule" -name "."
Это добавит узел <clear /> внутри <schedule>