使用Set-AzWebApp PowerShell cmdlet无法更新Azure App Service的AppSettings
原始提问
这看起来是一项相当简单的任务,我见过大量其他用户采用类似方式实现该需求的示例,但该方案在我这边始终无法生效,我的脚本内容如下:
$webapp = Get-AzWebApp -Name $webappname -ResourceGroupName $resourcegroupName $appset = $webapp.SiteConfig.AppSettings $appset $newsettings = new-object Microsoft.Azure.Management.WebSites.Models.NameValuePair $newsettings.Name = "keyName" $newsettings.Value = "MyValue" $appset.Add($newsettings) $newappset = @{} $appset | ForEach-Object { $newappset[$_.Name] = $_.Value } Set-AzWebApp -ResourceGroupName $resourcegroupName -Name $webappname -AppSettings $newappset $webapp = Get-AzWebApp -Name $webappname -ResourceGroupName $resourcegroupName Write-Output "New AppSettings:" $webapp.SiteConfig.AppSettings
执行脚本前后输出的配置完全一致,我在Azure门户中查看也没有发现任何配置变更,同时执行过程没有返回任何报错。请问有人能看出这段脚本存在什么问题吗?
问题解答
核心问题原因
- 从
Get-AzWebApp返回结果中获取的SiteConfig.AppSettings是只读强类型集合,旧版Az.Websites模块下调用Add()方法会静默失败,新配置项并未实际写入集合,后续生成的$newappset哈希表自然不包含新增键值对,因此提交配置时不会有变更,也不会抛出报错。 - 额外构造
NameValuePair对象的步骤冗余,增加了类型兼容风险,直接操作哈希表即可实现需求。
修正后可用脚本
# 读取现有WebApp配置 $webapp = Get-AzWebApp -Name $webappname -ResourceGroupName $resourcegroupName # 将现有配置直接转为哈希表 $appSettingsHash = @{} foreach ($setting in $webapp.SiteConfig.AppSettings) { $appSettingsHash[$setting.Name] = $setting.Value } # 直接在哈希表中新增/修改配置 $appSettingsHash["keyName"] = "MyValue" # 提交配置变更 Set-AzWebApp -ResourceGroupName $resourcegroupName -Name $webappname -AppSettings $appSettingsHash # 验证配置结果 $updatedWebApp = Get-AzWebApp -Name $webappname -ResourceGroupName $resourcegroupName Write-Output "New AppSettings:" $updatedWebApp.SiteConfig.AppSettings
注意事项
- 执行前请确保本地安装的Az.Websites模块为最新版本,避免旧版本存在参数兼容问题
- 若WebApp配置了部署插槽,需额外添加
-Slot参数指定对应插槽,否则默认仅修改生产插槽配置 Set-AzWebApp的-AppSettings参数为全量覆盖现有配置,不要直接传入仅包含新增项的哈希表,否则会删除所有原有配置
内容的提问来源于stack exchange,提问作者Varun Mehta
相关产品推荐
相关产品推荐

