从 PowerShell 使用 ARM 函数

Use ARM functions from PowerShell

TL;DR

以下行在 Azure DevOps ARM Template Deployment 任务中作为 ARM 脚本 运行 的一部分工作正常,但是,当从 PowerShell 运行 时,它无法提取订阅和资源组。

"serverFarmId": "[concat('/subscriptions/', subscription(), '/resourcegroups/', resourceGroup(), '/providers/Microsoft.Web/serverfarms/', parameters('hostingPlanName'))]"

如何设置订阅和资源组变量以便 ARM 函数可以提取值?

P.S。没关系,如果我必须先获取它们,然后手动设置它们以便脚本使用,只要我可以对 DevOps 和 PowerShell 使用相同的脚本。


这是模板的资源部分,同样,当从管道部署时,它会从任务参数中设置的任何内容中提取订阅和资源组。

"resources": [
{
  "apiVersion": "2018-11-01",
  "name": "[parameters('name')]",
  "type": "Microsoft.Web/sites",
  "location": "[resourceGroup().location]",
  "tags": {},
  "dependsOn": [
    "[concat('Microsoft.Web/serverfarms/', parameters('hostingPlanName'))]"
  ],
  "properties": {
    "name": "[parameters('name')]",
    "siteConfig": {
      "metadata": [
        {
          "name": "CURRENT_STACK",
          "value": "[parameters('currentStack')]"
        }
      ]
    },
    "serverFarmId": "[concat('/subscriptions/', subscription(), '/resourcegroups/', resourceGroup(), '/providers/Microsoft.Web/serverfarms/', parameters('hostingPlanName'))]",
    "clientAffinityEnabled": true
  }
},
{
  "apiVersion": "2018-11-01",
  "name": "[parameters('hostingPlanName')]",
  "type": "Microsoft.Web/serverfarms",
  "location": "[resourceGroup().location]",
  "kind": "",
  "tags": {},
  "dependsOn": [],
  "properties": {
    "name": "[parameters('hostingPlanName')]"
  },
  "sku": {
    "Tier": "[parameters('sku')]",
    "Name": "[parameters('skuCode')]"
  }
}
]

subscription()resourceGroup() 根据您的上下文执行 return objects。您应该考虑查询属性,而不是像:subscription().subscriptionIdresourceGroup().name 考虑到您是如何构建 ID 的。不过我不确定为什么它可以在您的 ARM 模板中使用。

作为旁注,您可以使用 resourceId([subscriptionId], [resourceGroupName], resourceType, resourceName1, [resourceName2], ...) 函数,如 here 所解释的那样,在引擎盖下它的执行与您所做的相同 (concat)。