如何将额外参数与New-AzureRmResourceGroupDeployment cmdlet一起传递

时间:2018-08-28 16:37:44

标签: azure azure-virtual-machine azure-resource-group azure-template

我正在编写一个Powershell脚本,以使用New-AzureRmResourceGroupDeployment cmdlet创建VM,如下所示。

New-AzureRmResourceGroupDeployment -Name VmDeployment  `
  -TemplateFile C:\template\template.json `
  -TemplateParameterFile C:\template\parameters.json

这用于创建VM。在parameters.json中,有一些参数,例如virtualMachineNamenetworkInterfaceName等已被硬编码。
现在,我正在尝试使这些脚本自动化,即在满足某些条件时,它们可以通过工具自行运行。

我在这里的要求是,无论何时运行此脚本,都必须增加VMName中的数字。假设虚拟机名称现在为VMName1,下一次运行脚本时必须为VMName2。下一次运行脚本时,类似VMName3。由于virtualMachineName参数是硬编码的,因此现在没有发生。无论如何,我可以在脚本本身中将virtualMachineName作为参数传递,而不是从json文件中获取。

高度赞赏任何指导。谢谢!

2 个答案:

答案 0 :(得分:4)

您绝对可以做到这一点,幸运的是,还有几种方法。

  1. 传递内联参数。它在Azure PowerShell docs for Templates中表示可以将内联参数与本地参数文件一起使用,并且内联参数优先。相关段落:

      

    您可以在同一部署操作中使用内联参数和本地参数文件。例如,您可以在本地参数文件中指定一些值,并在部署期间内联添加其他值。如果您同时在本地参数文件和内联中为参数提供值,则内联值优先。

    这很有价值,因为它为您提供了对VM Name参数的显式控制,但是由调用者(在本例中为您)传递内联参数。请注意,这仅适用于 local 参数文件,不适用于远程文件(即-TemplateParameterFile而非-TemplateParameterUri)。结果命令如下所示:

    New-AzureRmResoruceGroupDeployment -Name VmDeployment `
      -TemplateFile C:\template\template.json `
      -TemplateParameterFile C:\template\parameters.json `
      -virtualMachineName VMName42
    
  2. 修改原始的 parameters.json 。您可以编写一些PowerShell / Python / Favorite-scripting-language来解析 paramters.json ,找到VM Name参数,找到整数后缀,对其进行递增,然后用新版本覆盖文件。这样的好处是不必记住传递内联参数,而且您不必在任何地方跟踪版本号,因为它已经存储在 parameters.json 中。这有一个主要缺点:它会修改原始的JSON,这很危险。

  3. 复制 parameters.json 并修改临时副本。您可以编写脚本以将 parameters.json 复制到另一个临时JSON文件,然后在复制期间像选项2中那样增加VM Name参数。将该临时文件传递到New-AzureRmResourceGroupDeployment。这样做的好处是不修改原始的 parameters.json 文件,但需要您在某处跟踪版本号(例如,另一个本地文件,命令行参数,环境变量等)。

为简单起见,我建议使用选项1。它已经开箱即用,不需要任何外部脚本。

答案 1 :(得分:0)

我刚刚对其进行了测试,它的工作原理就是这样,现有答案是错误的

参数:

{
    "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "test": {
            "value": "1"
        }
    }
}

模板:

{
    "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "test": {
            "type": "string"
        },
        "testo": {
            "type": "string"
        }
    },
    "resources": []
}

powershell:

New-AzResourceGroupDeployment -ResourceGroupName NetworkWatcherRG -TemplateUri 'https://paste.ee/d/S2wJm/0' -TemplateParameterUri 'https://paste.ee/d/8rW6k/0'

它将提示您输入缺少的参数。如果使用TemplateParameterFile