Modifique o IIS web.config usando o PowerShell

5

Estou tentando modificar o web.config usando o PowerShell.

Até agora, posso substituir a string de conexão usando:

Set-WebConfigurationProperty -pspath "IIS:\Sites\$Name\WS" -filter "connectionStrings/add[@name='Product.Core.WebServices.Properties.Settings.DirectoryConnectionString']" -name "connectionString" -value "Server=SERVERNAME\INSTANCE1;Database=ProductDirectory.$Name;Trusted_Connection=True;"

isso funciona bem.

Agora, quero alterar algo na parte applicationSettings do web.config. A parte se parece com:

<applicationSettings>
    <Product.Core.WebServices.Properties.Settings>
      <setting name="LogLevel" serializeAs="String">
        <value>Info</value>
      </setting>
      <setting name="LogDirectory" serializeAs="String">
        <value>D:\temp</value>
      </setting>
      <setting name="LogSpecialTroubleshoot" serializeAs="String">
        <value>False</value>
      </setting>
      <setting name="LogSqlQueries" serializeAs="String">
        <value>False</value>
      </setting>
      <setting name="LogPerformance" serializeAs="String">
        <value>False</value>
      </setting>
      <setting name="LogXmlInput" serializeAs="String">
        <value>False</value>
      </setting>
      <setting name="LogXmlInputSeperate" serializeAs="String">
        <value>False</value>
      </setting>
      <setting name="EnableCatchAllLogging" serializeAs="String">
        <value>True</value>
      </setting>
      <setting name="DirectoryDatabaseName" serializeAs="String">
        <value>ProductDirectory</value>
      </setting>
    </Product.Core.WebServices.Properties.Settings>   
</applicationSettings>

Eu gostaria de alterar o nó "DirectoryDatabaseName".

Usando:

Set-WebConfigurationProperty -pspath "IIS:\Sites\$Name\WS" -filter "applicationSettings" -name "test" -value "ProductDirectory.$Name"

Eu posso mudar o nó "root" (applicationSettings) e adicionar um atributo com o nome "test" para ele. No entanto, se eu estou tentando ir "mais fundo" na estrutura, recebo o seguinte erro:

WARNING: Target configuration object 'applicationSettings/Product.Core.WebServices.Properties.Settings/setting[@name='DirectoryDatabaseName'] is not found a
t path 'MACHINE/WEBROOT/APPHOST/TestM/WS'.

Estou usando o seguinte PS para isso:

Set-WebConfigurationProperty -pspath "IIS:\Sites\$Name\WS" -filter "applicationSettings/Product.Core.WebServices.Properties.Settings/setting[@name='DirectoryDatabaseName']" -name "test" -value "ProductDirectory.$Name"

Nem mesmo isso funciona (mesmo erro):

Set-WebConfigurationProperty -pspath "IIS:\Sites\$Name\WS" -filter "applicationSettings/Product.Core.WebServices.Properties.Settings" -name "test" -value "ProductDirectory.$Name"

Então, de alguma forma, ele deixa de funcionar "um nível abaixo" applicationSettings

Além disso, como seria a sintaxe para alterar o texto entre <value> e </value> ?

    
por MichelZ 01.04.2014 / 10:49

1 resposta

4

As informações a seguir funcionaram para mim ao editar um arquivo web.config em um diretório virtual do site padrão e tentar visualizar e alterar a seção appSettings:

#List all appSettings
Get-WebConfigurationProperty -pspath "iis:\Sites\Default Web Site\VirtualDir" -filter "/appSettings/add" -name *

#Update specific appSetting
Set-WebConfigurationProperty -pspath "iis:\Sites\Default Web Site\VirtualDir" -filter "/appSettings/add[@key='SomeKey']" -name value -Value "SomeValue"

Isso pressupõe uma seção padrão de configurações de aplicativos web.config como:

<configuration>
    ...
    <appSettings>
        ...
        <add key="TestKey" value="TestValue"></add>
        ...
    </appSettings>
    ...
</configuration>

No seu caso, o valor é armazenado como um nó de texto em vez de um atributo, portanto, o xpath completo seria /applicationSettings/Product.Core.WebServices.Properties.Settings/setting[@name='DirectoryDatabaseName']/value/text() , mas não consigo encontrar nenhum exemplo de arquivos web.config com valores armazenados como nós de texto. Os exemplos para os cmdlets IIS também não é possível mostrar referências ao texto ().

Talvez seja necessário definir o filtro para recuperar o elemento de configurações e, em seguida, defini-lo como um elemento de valor com o texto correto. Novamente, os exemplos não mostram como fazer isso, mas mostram como usar um hashtable para definir vários valores, para que você possa encontrar uma maneira de fazê-lo funcionar.

    
por 11.08.2014 / 08:12