用于更新web.config文件

时间:2017-09-20 07:26:57

标签: powershell azure web-config azure-web-sites

...
<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中。我知道连接到azure应用程序并更新应用程序设置,如下所示。

$app = Set-AzureRMWebApp -Name $name -ResourceGroupName $group **-AppSettings $mysettingsCollection** -- this works fine

但我不确定更新xpath中的特定节点。如果可能,请提供一些示例脚本。类似的东西 - &gt;

$app = Set-AzureRMWebApp -Name $name -ResourceGroupName $group -**SYSTEM.WEB/SESSIONSATE VALUES**

2 个答案:

答案 0 :(得分:0)

要在维护所有其他连接字符串的同时更新单个Azure Web Apps连接字符串,您需要使用Set-AzureRmWebApp cmdlet在保存调用中传入所有连接字符串的值。为此,您必须首先遍历整个现有连接字符串列表,并在Hash集合上添加或设置特定连接字符串值之前将它们添加到Hash集合中。

在Azure Web App上更新一个或多个连接字符串时,请确保没有删除任何现有连接字符串:

# 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

使用PowerShell cmdlet在Azure Web App上添加或更新连接字符串时,这是一个重要提示。如果您忘记了,如果现有连接字符串多于您要添加或更新的连接字符串,则可能会意外删除应用程序的所有其他连接字符串。不要破坏生产,请记住使用此提示!

有关详细信息,请参阅此博文:Easily Manage Azure Web App Connection Strings using PowerShell

希望这有帮助。

答案 1 :(得分:0)

Powershell不会让你这样做。正确完成此操作的方法是通过XDT转换。 You can read more about using XDT transforms here

要理解的是,对于App Service应用程序,有一个配置对象是web.config的子集。所以应用程序设置,连接字符串和其他一些常见部分都是此配置对象的一部分。

通过这种方式,您可以添加“应用设置”,或使用您在应用配置中拥有的内容覆盖web.config中的项目。

特别是会话状态,这不是我们在app配置中的元素。所以这里的回落是web.config,因此需要进行XDT转换。

在他的情况下,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>