Нераспознанный элемент "ProviderOption" при попытке использовать Powershell Set-WebConfigurationProperty
Я пытаюсь создать сценарий Powershell для автоматизации изменений строки подключения к нашим развернутым веб-приложениям.
Я пытаюсь использовать WebAdministration
команда Set-WebApplicationProperty
но получаю ошибку о Unrecognized element: 'providerOption'
PS IIS:\Sites\Default Web Site\VirtualPath> Set-WebConfigurationProperty "//connectionStrings/*[@name='DefaultConnection']" -Name ConnectionString -Value "<NEW CONNECTION STRING>" -PSPath (Get-Location).Path
Set-WebConfigurationProperty : Filename: \\?\C:\Windows\Microsoft.NET\Framework64\v4.0.30319\CONFIG\web.config
Line number: 53
Error: Unrecognized element 'providerOption'
At line:1 char:1
+ Set-WebConfigurationProperty "//connectionStrings/*[@name='DefaultConnection']" ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [Set-WebConfigurationProperty], COMException
+ FullyQualifiedErrorId : System.Runtime.InteropServices.COMException,Microsoft.IIs.PowerShell.Provider.SetConfigurationPropertyCommand
Я нашел некоторую информацию об этой ошибке в StackOverflow, но, похоже, она связана с исходным выпуском.NET 4.0: https://stackoverflow.com/questions/21308965/unrecognized-element-provideroption
Некоторая дополнительная информация об окружающей среде:
ОПЕРАЦИОННЫЕ СИСТЕМЫ: Windows Server 2008 R2
IIS: 7.5
Powershell: v4.0
Версия.NET Framework: 4.5.2
Также стоит отметить, что эта команда прекрасно работает в Windows 8.1, IIS 8.5, Powershell 4.0, .NET 4.5.2.
РЕДАКТИРОВАТЬ: на догадку я сравнил Web.config
указано в ошибке между машиной, которая работает, и машиной, которая не работает. Они одинаковые.
1 ответ
Как оказалось, с помощью Powershell была красная сельдь. IIS использует файлы, расположенные в C:\Windows\System32\inetsrv\config\schema
для проверки различных конфигурационных файлов xml, с которыми работает веб-сервер. На IIS 7 и IIS 7.5, FX_schema.xml
отсутствует декларация для providerOption
,
Мой обходной путь - исправить файл схемы, добавив в этот каталог другой файл с именем "FX_schema.patch.xml"
со следующим содержанием:
<!--
IIS 7.0 and IIS 7.5 contain incorrect system.codedom sections in their FX_schema.xml files.
This version was taken from IIS 8.5 and contains the correct validations for the default web.config
in the CLR 4.0 folder. This file is only required on Windows Vista, 7, Server 2008 and Server 2008 R2.
-->
<configSchema>
<sectionSchema name="system.codedom">
<element name="compilers">
<collection addElement="compiler" removeElement="remove" clearElement="clear">
<attribute name="language" type="string" isCombinedKey="true" />
<attribute name="extension" type="string" isCombinedKey="true" />
<attribute name="type" type="string" />
<attribute name="warningLevel" type="int" />
<attribute name="compilerOptions" type="string" />
<collection addElement="providerOption" >
<attribute name="name" type="string" isCombinedKey="true" />
<attribute name="value" type="string" isCombinedKey="true" />
</collection>
</collection>
</element>
</sectionSchema>
</configSchema>
Этот файл объединен с существующим FX_schema.xml и позволяет моему WebAdministration
Команды для успешного завершения.