如何使用 Powershell 更新 Azure 资源模板部署的参数

How to Update Parameters for Azure Resource Template Deployment Using Powershell

我已经创建了一个模板,用于在 Azure 中创建新的 SQL 资源。

据此,我得到了两个标准文件:

我现在想使用 Powershell 创建部署。

我可以有不同的 parameters.json 文件,其中直接写入密码(这可行),但我想将密码置于源代码管理之外。 但是,我找不到在不更新文件的情况下更新参数的方法。

这是我的代码(使用 Test-AzResourceGroupDeployment, with the aim of moving to New-AzResourceGroupDeployment 一旦它工作):

$templatePath = "./sqlserver/template/template.json"
$paramsPath = "./sqlserver/template/parameters.json"
$administratorLogin = "adminUserName"
$administratorLoginPassword = "ARealPasswordHere!!!"
$databaseName = "MyDatabaseName"
$serverName = "serverforthedatabase"


$paramsFileText = [System.IO.File]::ReadAllText($paramsPath)
$params = ConvertFrom-Json $paramsFileText -AsHashtable
$params.parameters.administratorLogin = $administratorLogin
$params.parameters.administratorLoginPassword = ConvertTo-SecureString $administratorLoginPassword -AsPlainText -Force 
$params.parameters.databaseName = $databaseName
$params.parameters.serverName = $serverName

# Run New-AzResourceGroupDeployment when working
Test-AzResourceGroupDeployment -ResourceGroupName $resourceGroupName `
-TemplateFile $templatePath `
-TemplateParameterObject $params

如果我 运行 以上,我会得到一个关于 params 文件中每个参数的提示。

如果我将 -TemplateParameterObject $params 更改为 -TemplateParameterObject $params.parameters,则会出现 'Template parameter JToken type is not valid 错误。

如果我尝试制作一个 TemplateObject 所以两个输入都是对象,这也失败了。

Test-AzResourceGroupDeployment -ResourceGroupName $resourceGroupName `
-TemplateObject $templateObj `
-TemplateParameterObject $params.parameters

请问应该怎么做?

已设法找出答案。

您必须输入希望作为脚本的一部分覆盖的参数。已使用 New-AzResourceGroupDeployment 进行测试,一切正常。

这是我的工作代码:

$templatePath = "./sqlserver/template/template.json"
$paramsPath = "./sqlserver/template/parameters.json"
$administratorLogin = "adminUserName"
$administratorLoginPassword = ConvertTo-SecureString "ARealPasswordHere!!!" -AsPlainText -Force
$databaseName = "MyDatabaseName"
$serverName = "serverforthedatabase"


Test-AzResourceGroupDeployment -ResourceGroupName $resourceGroupName `
-TemplateFile $templatePath `
-TemplateParameterFile $paramsPath `
-administratorLogin $administratorLogin `
-administratorLoginPassword $administratorLoginPassword `
-databaseName $databaseName `
-serverName $serverName

and just for added clarity for searchers, here is part of the `parameters.json` file, so you can see some of the parameters I'm overriding here.

{
    "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "administratorLogin": {
            "value": ""
        },
        "administratorLoginPassword": {
            "value": ""
        },
        "collation": {
            "value": "SQL_Latin1_General_CP1_CI_AS"
        },
        "databaseName": {
            "value": ""
        },
        "tier": {
            "value": "Basic"
        },
...