Назад | Перейти на главную страницу

Нераспознанный элемент 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

Также стоит отметить, что эта команда отлично работает в Window 8.1, IIS 8.5, Powershell 4.0, .NET 4.5.2.

РЕДАКТИРОВАТЬ: Я догадывался, что сравнил Web.config указан в ошибке между машиной, которая работает, и машиной, которая не работает. Они идентичны.

Как оказалось, использование 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 команды для успешного завершения.