如何将附加参数与New-AzureRmResourceGroupDeployment cmdlet一起传递

Cra*_*der 3 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
Run Code Online (Sandbox Code Playgroud)

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

我的要求是,无论何时运行此脚本,都必须增加VMName中的数字。假设VM Name现在是VMName1,它必须是VMName2脚本下次运行时的时间。VMName3下次运行脚本时类似。由于virtualMachineName参数是硬编码的,所以现在不会发生这种情况。无论如何,我可以virtualMachineName在脚本本身中将其作为参数传递,而不是从json文件中获取。

任何指导都将受到高度赞赏。谢谢!

Ada*_*dam 7

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

  1. 传递内联参数。它说,在用于模板Azure PowerShell文档中,可以将内联参数与本地参数文件一起使用,并且内联参数优先。相关段落:

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

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

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

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

为了简单起见,我建议使用选项1。它已经可以直接使用,不需要任何外部脚本。

  • @4c74356b41 您评论中的示例没有 TemplateParameterUri 。 (3认同)