通过powershell部署Azure模板:“模板参数JToken类型无效”

问题描述 投票:0回答:1

我正在尝试使用ARM模板通过Powershell部署虚拟机。

我想使用模板参数将SSH公钥传递到模板中。

参数在模板文件中的定义如下:

    "parameters": {
        "sshPublicKey": {
            "type": "string"
        }
    },

这是Powershell脚本,在这里我从文件加载公钥并将其添加为模板参数。

$publicKey = (Get-Content .\keys\id_rsa.pub)

"Public Key is string of length {0}" -f $publicKey.Length

$parametersObject = @{"sshPublicKey" = $publicKey }

"Running the Deployment now"
New-AzResourceGroupDeployment -ResourceGroupName $resourceGroupName -TemplateFile .\template.json -TemplateParameterObject $parametersObject

我收到以下令人沮丧的错误:

New-AzResourceGroupDeployment:9:02:09 AM-错误:代码=无效模板;消息=部署模板验证失败:'模板参数JToken类型无效。预期为“字符串,Uri”。实际的“对象”。请参阅https://aka.ms/resource-manager-parameter-files了解使用详情。在C:\ users \ sheph \ Documents \ GitHub \ aspnet-core-linux-exercise \ setup-ubuntu-nginx \ deploy.ps1:20字符数:1+ New-AzResourceGroupDeployment -ResourceGroupName $ resourceGroupName-...+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~+ CategoryInfo:未指定:(:) [New-AzResourceGroupDeployment],异常+ FullyQualifiedErrorId:Microsoft.Azure.Commands.ResourceManager.Cmdlets.Implementation.NewAzureResourceGroupDeploymentCmdlet

起初我以为这是字符串长度的问题。 (密钥的长度为402个字符)。但是,如果我用402个连续的'A'字符代替它,我不会得到错误。

我还有另一个使用模板参数文件而不是模板参数对象的示例,它也可以使用。

我有办法使它正常工作吗?

azure azure-powershell azure-deployment azure-template
1个回答
1
投票

问题是我的$ publicKey值包含换行符。

我通过调用Trim方法修复了它。

$publicKey = (Get-Content .\keys\id_rsa.pub);
$publicKey = $publicKey.Trim();
$parametersObject = @{"sshPublicKey" = $publicKey }
© www.soinside.com 2019 - 2024. All rights reserved.