Нераспознанный элемент "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 Команды для успешного завершения.

Другие вопросы по тегам