Добавление параметров приложения в существующее веб-приложение Azure с помощью Azure Power Shell

Я хочу написать скрипт, который запускается с помощью оболочки Azure Power для автоматизации добавления конфигурации веб-приложения

Azure > MyWebApp > Настройки приложения> Настройки приложения

Это похоже на ключ = "значение"

Я пишу этот скрипт

###########################
# MyApp Config Automation #
###########################

#Begin

$subscriptionName="MySubscriptionName"
$webSiteName="MyWebAppName"
$storageAccountName="StorageAccountName"
########################################
$userName = "myaccount@outlook.com"
$securePassword = ConvertTo-SecureString -String "mypass" -AsPlainText -Force
#####################################
$cred = New-Object System.Management.Automation.PSCredential($userName, $securePassword)
#####################################
Add-AzureAccount -Credential $cred 
Select-AzureSubscription -SubscriptionName $subscriptionName -Default
#####################################
Get-AzureWebsite -Name $webSiteName

#End

но я знаю, что приведенный выше сценарий предназначен только для получения моего веб-приложения, теперь мне нужно получить доступ к MyWebApp> Настройки приложения> Настройки приложения и указать файл / массив сценариев моих новых настроек приложения и скрипт, чтобы проверить наличие новых ключей настроек приложения. он добавит его в настройки приложения, если есть какие-либо ключи, он переопределит его значение. Какие шаги или APIS или я могу сделать это с помощью Azure Power Shell?

Изменить. Этот скрипт может автоматизировать создание нового веб-приложения и добавление в него параметров приложения:

##############################################
# Creating website and Adding Configs Script #
##############################################

$webSiteName="mywebsite"
$storageAccountName="storageaccount"
$subscriptionName="mysubsc"
$userName = "myaccount"
$securePassword = ConvertTo-SecureString -String "mypass" -AsPlainText -Force
$cred = New-Object System.Management.Automation.PSCredential($userName, $securePassword)
Add-AzureAccount -Credential $cred 
Select-AzureSubscription -SubscriptionName $subscriptionName -Default

New-AzureWebsite -Name $webSiteName
New-AzureStorageAccount –StorageAccountName $storageAccountName -Location "South Central US"
$ClientId="dfgdf6"
$Password="ffefe"
$StorageAccountKey = Get-AzureStorageKey -StorageAccountName $storageAccountName
$AppSettings = @{"StorageAccountPrimary" = $StorageAccountKey.Primary;"StorageAccountSecondary" = $StorageAccountKey.Secondary;"ida:ClientId"=$ClientId;"ida:Password"=$Password}

Set-AzureWebsite -Name $webSiteName -AppSettings $AppSettings

4 ответа

Решение

Вот обновление к нему, основанное на командах Azure PowerShell от 12/2015. Пример предназначен для параметров, относящихся к конкретным слотам. Если вы хотите использовать глобальные параметры, используйте Get/Set-AzureRmWebApp и удалите параметр -slot.

$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

Получить настройки приложения

Сначала установите эти две переменные.

$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

Использовать Set-AzureWebsite преобразовать переменную в хеш-таблицу.

 $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

Полный код

$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

Заметки

AzureServiceManagement и AzureResourceManager не предназначены для использования в одном сеансе. На данный момент последнее не позволяет обновлять настройки приложения через Set-AzureResource, Выше это обходной путь. Другой способ - использовать интерфейс командной строки Azure вместо PowerShell.

Эти ответы показывают их возраст, поскольку как исходная оболочка Azure PowerShell, так и AzureRM устарели. Для этого с помощью модуля Az PowerShell это будет выглядеть так:

пример

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)

объяснение

  1. Connection-AzAccount - подключается к учетной записи Azure, вам может потребоваться выполнить следующий шаг, если вам нужно выбрать подписку
  2. $site = Get-AzWebApp... - получает сайт для изменения
  3. $oldSettings... - получает все существующие настройки и помещает их в HashTable
    1. $site.SiteConfig.AppSettings | % - Передает (передает) каждый параметр через сокращенный псевдоним ForEach-Object
    2. { $h = @{} } - создает HashTable через -Begin позиционный параметр
    3. { $h[$_.Name] = $_Value } - добавляет именованное значение к HashTable для каждого значения в $site.SiteConfig.AppSettings через -Process позиционный параметр
    4. { $h } - возвращает вновь заселенный HashTable через -End позиционный параметр для переменной слева
  4. $newSettings = @{... - создает HashTable из настроек, чтобы добавить
  5. Set-AzWebApp... - объединяет две HashTables и заменяет существующие AppSettings объединенным набором. Обратите внимание, что это предполагает, что у вас нет дубликатов между старыми и новыми настройками. Если эта ситуация применима к вам, вам понадобится дедупликация таким образом, чтобы это имело смысл, т. Е. Перезапись / отсутствие перезаписи.

Обновление 2023 г.

Вот служебная функция, похожая на функцию @robb-vandaveer, но перезаписывающая новые настройки старыми, если ключи перекрываются. Вы можете получить обратное поведение, просто поменяв порядокforeachзаявления.

Обратите внимание: предполагается, что вы уже подключены к Azure.

      function Update-WebAppSettings {
    Param(
        [Parameter(Mandatory)]
        [ValidateNotNullOrEmpty()]
        [string]$ResourceGroupName,
        [Parameter(Mandatory)]
        [ValidateNotNullOrEmpty()]
        [string]$AppName,
        [Parameter(Mandatory)]
        [ValidateNotNullOrEmpty()]
        [hashtable]$AdditionalAppSettings
    )

    #common parameters to target the app in the resource group
    $WebAppSelection = @{
        ResourceGroupName = $ResourceGroupName
        Name              = $AppName
    }

    # hashtable where we will build up the complete merged set of app settings
    $NewAppSettings = @{}

    # get the old settings
    $CurrentAppSettingList = $(Get-AzWebApp @WebAppSelection).SiteConfig.AppSettings

    # they are in list format, so iterate through and add 
    # them to the hashtable we are building
    foreach ($Setting in $CurrentAppSettingList) {
        $NewAppSettings[$Setting.Name] = $Setting.Value
    }

    # iterate through the new settings hashtable and add them to the one we are building
    # NB: if new settings have the same keys as old settings it will overwrite them (this 
    # is different behavior than if you merge the two hashtables with the '+' operator)
    foreach ($Key in $AdditionalAppSettings.Keys) {
        $NewAppSettings[$Key] = $AdditionalAppSettings[$Key]
    }

    $WebAppSettings = @{
        AppSettings       = $NewAppSettings
    }

    Set-AzWebApp @WebAppSelection @WebAppSettings
}

На сайте вызова просто выполните:

      $AdditionalAppSettings = @{
    someSetting = "someValue"
    someOtherSetting = "someOtherValue"
}
Update-WebAppSettings -ResourceGroupName my-resource-group -AppName myWebServicesApp -AdditionalAppSettings @AdditionalAppSettings
Другие вопросы по тегам