使用 PowerShell 修改 IIS web.config

使用 PowerShell 修改 IIS web.config

我正在尝试使用 PowerShell 修改 web.config。

到目前为止,我可以使用以下命令替换连接字符串:

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;"

一切正常。

现在,我想更改 web.config 中的 applicationSettings 部分。该部分如下所示:

<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>

我想改变“DirectoryDatabaseName”节点。

使用:

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

我可以更改“根”节点 (applicationSettings) 并向其添加名为“test”的属性。但是,如果我尝试“更深入”地了解结构,则会收到以下错误:

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

我使用以下 PS 来实现这一点:

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

这甚至不起作用(同样的错误):

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

所以不知何故它停止了“低一级”的工作applicationSettings

<value>此外,如何用语法来改变和之间的文本</value>

答案1

当我在默认网站的虚拟目录中编辑 web.config 文件并尝试查看和更改 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"

假设标准的 web.config appSettings 部分如下所示:

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

在您的例子中,值存储为文本节点而不是属性,因此完整的 xpath 将是,/applicationSettings/Product.Core.WebServices.Properties.Settings/setting[@name='DirectoryDatabaseName']/value/text()但是我找不到任何将值存储为文本节点的 web.config 文件的示例。IIS 命令也不显示任何对 text() 的引用。

您可能需要设置过滤器以检索设置元素,然后将其设置为具有正确文本的值元素。同样,示例没有显示如何执行此操作,但它们确实显示了如何使用哈希表设置多个值,因此您可能能够找到一种方法来使其工作。

相关内容