使用 Azure Power Shell 将应用程序设置添加到现有的 Azure Web 应用程序
Adding an App Settings to existing Azure Web Application using Azure Power Shell
我想编写一个脚本,运行 使用 azure power shell 来自动添加 Web 应用程序配置
Azure > MyWebApp > 应用程序设置 > 应用程序设置
看起来像钥匙= "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
但我知道上面的脚本只能获取我的 Web 应用程序,现在我需要访问 MyWebApp > Application Settings > App settings 并提供我的新 App 设置的脚本 file/array 和脚本检查是否有任何新的 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
检索应用程序设置
先设置这两个变量。
$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
Add/Update 应用设置
要更新设置,请先将它们放入变量中。
$props = (Invoke-AzureResourceAction -ResourceGroupName $myResourceGroup `
-ResourceType Microsoft.Web/sites/Config -Name $mySite/appsettings `
-Action list -ApiVersion 2015-08-01 -Force).Properties
要使用Set-AzureWebsite
将变量转换为散列table。
$hash = @{}
$props | Get-Member -MemberType NoteProperty | % { $hash[$_.Name] = $props.($_.Name) }
现在 add/update 散列中的值 table。
$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。
这是基于 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
这些答案已经过时,因为原来的 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)
说明
Connection-AzAccount
- 连接到 Azure 帐户,如果您需要 select 订阅 ,您可能需要执行后续步骤
$site = Get-AzWebApp
... - 检索要修改的站点
$oldSettings
... - 获取所有现有设置并将它们放入哈希表中
$site.SiteConfig.AppSettings | %
- 通过 ForEach-Object
的 shorthand 别名管道(传递)每个设置
{ $h = @{} }
- 通过 -Begin
位置参数 创建一个 HashTable
{ $h[$_.Name] = $_Value }
- 通过 -Process
位置参数 为 $site.SiteConfig.AppSettings
中的每个值添加一个命名值到 HashTable
{ $h }
- returns 新填充的 HashTable
通过 -End
位置参数到左边的变量
$newSettings = @{
... - 创建 HashTable
设置以添加
Set-AzWebApp
... - 组合两个哈希表并用组合集替换现有的 AppSettings。请注意,这假定您在旧设置和新设置之间没有重复项。如果这种情况适用于您,您将需要以对您有意义的方式进行重复数据删除,即 overwrite/no 覆盖。
我想编写一个脚本,运行 使用 azure power shell 来自动添加 Web 应用程序配置
Azure > MyWebApp > 应用程序设置 > 应用程序设置
看起来像钥匙= "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
但我知道上面的脚本只能获取我的 Web 应用程序,现在我需要访问 MyWebApp > Application Settings > App settings 并提供我的新 App 设置的脚本 file/array 和脚本检查是否有任何新的 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
检索应用程序设置
先设置这两个变量。
$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
Add/Update 应用设置
要更新设置,请先将它们放入变量中。
$props = (Invoke-AzureResourceAction -ResourceGroupName $myResourceGroup `
-ResourceType Microsoft.Web/sites/Config -Name $mySite/appsettings `
-Action list -ApiVersion 2015-08-01 -Force).Properties
要使用Set-AzureWebsite
将变量转换为散列table。
$hash = @{}
$props | Get-Member -MemberType NoteProperty | % { $hash[$_.Name] = $props.($_.Name) }
现在 add/update 散列中的值 table。
$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。
这是基于 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
这些答案已经过时,因为原来的 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)
说明
Connection-AzAccount
- 连接到 Azure 帐户,如果您需要 select 订阅 ,您可能需要执行后续步骤
$site = Get-AzWebApp
... - 检索要修改的站点$oldSettings
... - 获取所有现有设置并将它们放入哈希表中$site.SiteConfig.AppSettings | %
- 通过ForEach-Object
的 shorthand 别名管道(传递)每个设置
{ $h = @{} }
- 通过-Begin
位置参数 创建一个 { $h[$_.Name] = $_Value }
- 通过-Process
位置参数 为 { $h }
- returns 新填充的HashTable
通过-End
位置参数到左边的变量
HashTable
$site.SiteConfig.AppSettings
中的每个值添加一个命名值到HashTable
$newSettings = @{
... - 创建HashTable
设置以添加Set-AzWebApp
... - 组合两个哈希表并用组合集替换现有的 AppSettings。请注意,这假定您在旧设置和新设置之间没有重复项。如果这种情况适用于您,您将需要以对您有意义的方式进行重复数据删除,即 overwrite/no 覆盖。