【问题标题】:Adding an App Settings to existing Azure Web Application using Azure Power Shell使用 Azure Power Shell 将应用设置添加到现有 Azure Web 应用程序
【发布时间】:2015-09-12 21:11:49
【问题描述】:

我想编写一个使用 azure power shell 运行的脚本来自动添加 Web 应用程序配置

Azure > MyWebApp > 应用程序设置 > 应用程序设置

看起来像 key = "value"

我写这个脚本

###########################
# 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 > 应用程序设置 > 应用程序设置并提供我的新应用程序设置的脚本文件/数组,并检查是否有任何新的脚本App Settings 键会将其添加到 App Settings,如果有任何现有键,它将覆盖它的值。 步骤或 APIS 是什么,或者我可以使用 azure power shell 做到这一点吗?

编辑: 此脚本可以自动创建新的 Web 应用程序并为其添加应用程序设置:

##############################################
# 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

【问题讨论】:

  • 您的编辑是否回答了您的问题?
  • @ShaunLuttin 我认为没有

标签: powershell azure azure-powershell


【解决方案1】:

随着原始 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 = @{} } - 通过-Begin 位置参数创建HashTable
    3. { $h[$_.Name] = $_Value } - 通过-Process 位置参数为$site.SiteConfig.AppSettings 中的每个值添加一个命名值到HashTable
    4. { $h } - 通过-End 位置参数将新填充的HashTable 返回给左侧的变量
  4. $newSettings = @{... - 创建要添加的设置的 HashTable
  5. Set-AzWebApp... - 组合两个 HashTable 并用组合集替换现有的 AppSettings。请注意,这假设您在新旧设置之间没有重复项。如果这种情况适用于您,您将需要以对您有意义的方式进行重复数据删除,即覆盖/不覆盖。

【讨论】:

  • 很好的答案,但如果哈希包含任何相同的键,($oldSettings + $newSettings) 将不起作用。
【解决方案2】:

这是基于 12/2015 Azure PowerShell 命令的更新。该示例用于特定于插槽的设置,如果您想要全局,请使用 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

【讨论】:

  • 这是 12/2015 Azure PowerShell 命令发布的更好答案。
  • 我必须运行此代码 sn-p,同时使用 Set-AzureRMWebApp 和 Set-AzureRMWebAppSlot,否则,如果我只运行 Set-AzureRMWebApp,暂存槽中的非槽特定设置不会更新.除非我错过了什么……
  • 另外值得注意的是,如果您将其作为 azure 管道中的一个步骤运行,则需要 Enable-AzureRmAlias 才能使用 Set-AzureRMWebAppSlot
【解决方案3】:

检索应用设置

先设置这两个变量。

$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 CLI 而不是 PowerShell。

【讨论】:

  • 非常感谢您的详细解答,我会检查并回复您
猜你喜欢
  • 2011-05-21
  • 1970-01-01
  • 1970-01-01
  • 2023-03-24
  • 1970-01-01
  • 1970-01-01
  • 2017-03-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多