2017-09-20 27 views
0
... 
<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** 

回答

0

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

根據您的輸入,我決定不以這種方式存儲連接字符串。我更改爲通過C#代碼獲取連接字符串。 –

0

爲了更新單個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

希望這會有所幫助。

+0

謝謝阿肖克您的寶貴時間和響應。這個代碼將更新配置文件的連接字符串部分然而連接字符串我想更新位於web.config文件中xpath配置\ system.web \ sessionState \ providers \ add [@ name = PR OVIDER_NAME]的xml元素的屬性(CONNECTION STRING)。注意:這是一個天藍色的MVC5.net webapp。你能幫忙嗎? –