Powershell脚本更新web.config文件中system.web部分下的会话存储部分
...
<system.web>
...other nodes..
<sessionState timeout="10" mode="Custom" customProvider="PROVIDER_NAME">
<providers>
<add name="PROVIDER_NAME" type="PROVIDER_TYPE" throwOnError="true" retryTimeoutInMilliseconds="5000" databaseId="0" applicationName="AppNAME" connectionString="CONNECTION_STRING" />
</providers>
</sessionState>
..other nodes...
</system.web>
我在web.config文件中有上述条目。我喜欢使用powershell脚本更新上述节点中的连接字符串。更改应该仅影响连接字符串而不是任何其他节点/属性。我的应用程序以azure托管。我知道连接到天蓝色的应用程序并更新应用程序设置如下。Powershell脚本更新web.config文件中system.web部分下的会话存储部分
$app = Set-AzureRMWebApp -Name $name -ResourceGroupName $group **-AppSettings $mysettingsCollection** -- this works fine
但我不确定要更新xpath中的特定节点。请尽可能提供一些示例脚本。类似的东西 - >
$app = Set-AzureRMWebApp -Name $name -ResourceGroupName $group -**SYSTEM.WEB/SESSIONSATE VALUES**
Powershell不会让你这样做。正确完成这项工作的方法是通过XDT转换。 You can read more about using XDT transforms here
要理解的是,对于App Service应用程序,存在一个配置对象,它是web.config的子集。所以诸如应用程序设置,连接字符串和一些其他常见部分的东西都是此配置对象的一部分。
通过这种方式,您可以添加“应用程序设置”,或者使用您的应用程序配置中的内容覆盖web.config中的项目。
具体会话状态,这不是我们在应用程序配置中的元素。所以这里回落的是web.config,因此需要进行XDT转换。
在T他的情况下,XDT变换会是这样的:
<?xml version="1.0"?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
<system.web>
<sessionState timeout="10" mode="Custom" customProvider="PROVIDER_NAME">
<providers>
<add name="PROVIDER_NAME" type="PROVIDER_TYPE" throwOnError="true" retryTimeoutInMilliseconds="5000" databaseId="0" applicationName="AppNAME" connectionString="CONNECTION_STRING" />
</providers>
</sessionState>
</system.web>
</configuration>
为了更新单个Azure的Web应用程序的连接字符串,同时保持所有其他的连接字符串,你需要的值通过在保存所有连接蜇调用使用Set-AzureRmWebApp小命令。要做到这一点,你必须首先迭代现有的连接字符串的整个列表,并将其添加到哈希集合,然后在哈希集合上添加或设置特定的连接字符串值。
做出的更新上的Azure的Web应用程序的一个或多个连接字符串时,请确保没有现有的连接字符串被删除:
# Load Existing Web App settings
$webApp = Get-AzureRmWebAppSlot -ResourceGroupName "MyResourceGroup" -Name "MyWebApp" -Slot production
# Get reference to the existing Connection Strings
$existingConnectionStrings = $webApp.SiteConfig.ConnectionStrings
# Create Hash variable for Connection Strings
$hash = @{}
# Copy over all Existing Connection Strings to the Hash
ForEach($connString in $existingConnectionString) {
$hash[$connString.Name] = @{ Type = $connString.Type.ToString(); Value = $connString.ConnectionString }
}
# Add or Update a desired Connection String within the Hash collection
$hash["AppConnString"] = @{ Type = "SqlAzure"; Value = "conn-string-here" }
# Save Connection String to Azure Web App
Set-AzureRmWebAppSlot -ResourceGroupName "MyResourceGroup" -Name "MyWebApp" -Slot production -ConnectionStrings $hash
这是一个重要的秘诀记住在Azure Web App上使用PowerShell cmdlet添加或更新连接字符串时的情况。如果您忘记了,如果现有的连接字符串数量多于您正在添加或更新的数量,您可能会意外删除该应用程序的所有其他连接字符串。不要打破生产,请记住使用这个技巧!
欲了解更多详情,请参阅此博客文章:Easily Manage Azure Web App Connection Strings using PowerShell。
希望这会有所帮助。
谢谢阿肖克您的宝贵时间和响应。这个代码将更新配置文件的连接字符串部分然而连接字符串我想更新位于web.config文件中xpath配置\ system.web \ sessionState \ providers \ add [@ name = PR OVIDER_NAME]的xml元素的属性(CONNECTION STRING)。注意:这是一个天蓝色的MVC5.net webapp。你能帮忙吗? –
根据您的输入,我决定不以这种方式存储连接字符串。我更改为通过C#代码获取连接字符串。 –