如何传递额外参数以及New-AzureRmResourceGroupDeployment cmdlet

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

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

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

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

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

任何指导都非常感谢。谢谢!

azure azure-virtual-machine azure-resource-group azure-template
2个回答
7
投票

你绝对可以做到这一点,幸运的是还有一些方法。

  1. 传递内联参数。它在Azure PowerShell docs for Templates中说你可以使用带有本地参数文件的内联参数,并且内联参数优先。相关段落: 您可以在同一部署操作中使用内联参数和本地参数文件。例如,您可以在本地参数文件中指定一些值,并在部署期间内联添加其他值。如果在本地参数文件和内联中为参数提供值,则内联值优先。 这很有价值,因为它为您提供了对VM Name参数的显式控制,但是由调用者(在本例中为您)来传递内联参数。请注意,这仅适用于本地参数文件,而不适用于远程文件(即-TemplateParameterFile而不是-TemplateParameterUri)。生成的命令看起来像: New-AzureRmResoruceGroupDeployment -Name VmDeployment ` -TemplateFile C:\template\template.json ` -TemplateParameterFile C:\template\parameters.json ` -virtualMachineName VMName42
  2. 修改原始参数.json。您可以编写一些PowerShell / Python / Favorite-scripting语言来解析paramters.json,找到VM Name参数,找到整数后缀,递增它,并用新版本覆盖该文件。这样做的好处是不必记住传递内联参数,并且您不必在任何地方跟踪版本号,因为它已经存储在parameters.json中。这有一个主要缺点:它修改了原始的JSON,这可能是危险的。
  3. 复制parameters.json并修改临时副本。您可以编写脚本以将parameters.json复制到另一个临时JSON文件,然后在复制期间增加VM Name参数,就像在选项2中一样。将此临时文件传递给New-AzureRmResourceGroupDeployment。这样做的好处是不修改原始的parameters.json文件,但需要您在某处跟踪版本号(例如,另一个本地文件,命令行参数,环境变量等)。

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

© www.soinside.com 2019 - 2024. All rights reserved.