2013-05-18 2 views
4

Я добавление WebDAV authoringRule с использованиемДобавить <clear /> элемент WebDAV authoringRules с помощью PowerShell

Add-WebConfiguration /system.webserver/webdav/authoringRules -PSPath IIS: -Location "$site_name/$app_name/VD" -Value @{users="*";path="*";access="Read,Write"} 

В некоторых средах это конфликтует с тем же правилом авторинга в родителе, и, таким образом бросает ошибку. Я хочу, чтобы добавить ясный элемент в начале authoringRules так это выглядит примерно так

<authoringRules> 
    <clear /> 
    <add users="*" path="*" access="Read, Write" /> 
</authoringRules> 

Но Clear-WebConfiguration только очищает существующие правила. Как использовать powershell для добавления элемента <clear /> в файл конфигурации?

+0

Почему не создается текстовый файл (через скрипт powershell) после создания файла web.config? –

+0

Потому что это кажется неэлегантным по сравнению с вариантами добавления и удаления правил. Кроме того, остальная часть файла сценария - это, в основном, серия вызовов WebAdministration. – ILMTitan

+0

Извините, но у меня есть только это уродливое и плохо одетые предложения. :( –

ответ

1

Я считаю, что вы имеете в виду applicationHost.config.

Я также обнаружил, что это проблема с командованием WebAdministration, я решил это, используя класс ServerManager. Моя особая проблема была связана с коллекцией поставщиков WindowsAuthentication, но я не вижу причин, почему это не сработает для вас.

Возможно, вам придется исправить путь в вызове GetSection, но это должно помочь вам приблизиться к тому, что вам нужно.

[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.Web.Administration") | Out-Null 

$serverManager = new-object Microsoft.Web.Administration.ServerManager 
$config = $serverManager.GetApplicationHostConfiguration() 
$authoringRulesSection = $config.GetSection("/system.webserver/webdav/authoringRules", "$($site_name)/$($app_name)/VD"); 

# Grab a reference to the collection of authoringRules 
$authoringRulesCollection = $authoringRulesSection.GetCollection("authoringRules"); 

# Clear the current collection this also adds the <clear /> tag 
$authoringRulesCollection.Clear(); 

# Add to the collection 
$addElement = $authoringRulesCollection.CreateElement("add") 
$addElement["users"] = "*"; 
$addElement["path"] = "*"; 
$addElement["access"] = "Read, Write"; 
$authoringRulesCollection.Add($addElement); 

# Save the updates 
$serverManager.CommitChanges();