我正在尝试使用PowerShell修改web.config。
到目前为止,我可以使用以下方法replace连接string:
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>之间的文本?
在编辑默认网站的虚拟目录中的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 cmdlet的示例也不显示任何对text()的引用。
您可能必须设置筛选器来检索设置元素,然后将其设置为具有正确文本的值元素。 这些例子再一次没有说明如何做到这一点,但是他们确实展示了如何使用散列表来设置多个值,所以你可能会find一种方法来使其工作。