Adding an App Settings to existing Azure Web Application using Azure Power Shell

后端 未结 3 1543
一生所求
一生所求 2020-12-02 11:35

I want to write a script that run using azure power shell to automate adding the Web Application configuration

Azure > MyWebApp > Application Settings > App settings

相关标签:
3条回答
  • 2020-12-02 11:47

    Retrieve App Settings

    First set these two variables.

    $myResourceGroup = 'RESOURCE_GROUP_NAME'
    $mySite = 'SITE_NAME'
    

    Then switch to the new Resource Manager mode and sign-in to your account.

    Switch-AzureMode AzureResourceManager
    Get-AzureAccount
    

    Then retrieve the app settings. (Note that a back tick (`) means a new line.)

    (Invoke-AzureResourceAction -ResourceGroupName $myResourceGroup `
     -ResourceType Microsoft.Web/sites/Config -Name $mySite/appsettings `
     -Action list -ApiVersion 2015-08-01 -Force).Properties
    

    Add/Update App Settings

    To update settings, first put them into a variable.

    $props = (Invoke-AzureResourceAction -ResourceGroupName $myResourceGroup `
     -ResourceType Microsoft.Web/sites/Config -Name $mySite/appsettings `
     -Action list -ApiVersion 2015-08-01 -Force).Properties
    

    To use Set-AzureWebsite convert the variable to a hash table.

     $hash = @{}
     $props | Get-Member -MemberType NoteProperty | % { $hash[$_.Name] = $props.($_.Name) }
    

    Now add/update values in the hash table.

    $hash.NewKey = "NewValue"
    $hash.ExistingKey = "NewValue"
    

    Then switch back to Service Management mode and commit the settings.

    Switch-AzureMode AzureServiceManagement
    Set-AzureWebsite -Name $mySite -AppSettings $hash
    

    Complete Code Listing

    $myResourceGroup = 'RESOURCE_GROUP_NAME'
    $mySite = 'SITE_NAME'
    
    Switch-AzureMode AzureResourceManager
    Get-AzureAccount
    
    (Invoke-AzureResourceAction -ResourceGroupName $myResourceGroup `
     -ResourceType Microsoft.Web/sites/Config -Name $mySite/appsettings `
     -Action list -ApiVersion 2015-08-01 -Force).Properties
    
    $props = (Invoke-AzureResourceAction -ResourceGroupName $myResourceGroup `
     -ResourceType Microsoft.Web/sites/Config -Name $mySite/appsettings `
     -Action list -ApiVersion 2015-08-01 -Force).Properties
    
     $hash = @{}
     $props | Get-Member -MemberType NoteProperty | % { $hash[$_.Name] = $props.($_.Name) }
    
    $hash.NewKey = "NewValue"
    $hash.ExistingKey = "NewValue"
    
    Switch-AzureMode AzureServiceManagement
    Set-AzureWebsite -Name $mySite -AppSettings $hash
    

    Notes

    The AzureServiceManagement and AzureResourceManager are not meant for use in the same session. For now the latter does not seem to permit updating the app settings via Set-AzureResource. The above is a workaround. Another way is to use the Azure CLI instead of PowerShell.

    0 讨论(0)
  • 2020-12-02 11:53

    Here's an update to it based on the 12/2015 Azure PowerShell commands. The example is for slot-specific settings, if you want global, use Get/Set-AzureRmWebApp and remove the -slot parameter.

    $myResourceGroup = 'PartsUnlimitedMRP'
    $mySite = 'centpartsunlimited'
    
    $webApp = Get-AzureRMWebAppSlot -ResourceGroupName $myResourceGroup -Name $mySite -Slot production
    $appSettingList = $webApp.SiteConfig.AppSettings
    
    $hash = @{}
    ForEach ($kvp in $appSettingList) {
        $hash[$kvp.Name] = $kvp.Value
    }
    
    $hash['NewKey'] = "NewValue"
    $hash['ExistingKey'] = "NewValue"
    
    Set-AzureRMWebAppSlot -ResourceGroupName $myResourceGroup -Name $mySite -AppSettings $hash -Slot production
    
    0 讨论(0)
  • These answers are showing their age as both the original Azure PowerShell and AzureRM are deprecated. To do this using the Az PowerShell module it would look like this:

    Example

    Connect-AzAccount
    $site = Get-AzWebApp -Name foo-com-dev-as
    $oldSettings = ($site.SiteConfig.AppSettings | % { $h = @{} } { $h[$_.Name] = $_.Value } { $h })
    
    $newSettings = @{ StorageAccountPrimary = $StorageAccountKey.Primary
                      StorageAccountSecondary = $StorageAccountKey.Secondary
                      "ida:ClientId" = $ClientId
                      "ida:Password" = $Password }
    
    Set-AzWebApp -ResourceGroupName foo-com-dev-rg -Name foo-com-dev-as -AppSettings ($oldSettings + $newSettings)
    
    

    Explanation

    1. Connection-AzAccount - connects to the Azure account, you may need to perform a subsequent step if you need to select a subscription
    2. $site = Get-AzWebApp... - retrieves the site to be modified
    3. $oldSettings... - gets all of the existing settings and puts them into a HashTable
      1. $site.SiteConfig.AppSettings | % - Pipes (passes) each setting via a shorthand alias of ForEach-Object
      2. { $h = @{} } - creates a HashTable via the -Begin positional parameter
      3. { $h[$_.Name] = $_Value } - adds a named value to the HashTable for each value in $site.SiteConfig.AppSettings via the -Process positional parameter
      4. { $h } - returns the newly populated HashTable via the -End positional parameter to the variable to the left
    4. $newSettings = @{... - creates a HashTable of the settings to add
    5. Set-AzWebApp... - combines the two HashTables and replaces the existing AppSettings with the combined set. Note that this assumes that you have no duplicates between the old and new settings. If that situation applies to you, you'll need dedupe in a way that makes sense for you i.e., overwrite/no overwrite.
    0 讨论(0)
提交回复
热议问题