从Azure VM中访问JSON中的变量?

时间:2016-02-16 13:06:44

标签: json powershell variables azure import

我正在使用Azure Powershell命令New-AzureRmResourceGroupDeployment和JSON模板文件,并且我将一些参数提供给它将与JSON文件一起使用的命令。 JSON还指示新创建的VM从Azure存储下载Powershell脚本并运行它。

我需要将Azure Powershell脚本中的一些值传递给“VM-local”Powershell脚本。为了论证,让我们说我的Azure Powershell脚本有一个变量$foo,其值为bar,表示“要在C:\上创建的文件夹的名称(所以{{1} }})”。

如何?

如何在VM中运行的脚本访问值C:\bar(无论如何)?如果我需要将JSON文件用作“信使”或任何其他必要的技巧,那就没问题。我不认为我可以在从Azure存储下载并随后运行它之前修改“VM-local”Powershell脚本。

2 个答案:

答案 0 :(得分:1)

如果在VM上的JSON模板中使用脚本扩展来运行脚本,则可以为该脚本指定整个cmd行。在该cmd行上,您将传递参数,就像交互式运行它一样。 IOW,考虑运行该脚本的cmdline以及您将放入模板的脚本扩展中的内容。

看一下这个例子:

https://github.com/Azure/azure-quickstart-templates/blob/f18a95e857a4caf86b4c2e77e652cec678cd524c/201-vm-winrm-windows/azuredeploy.json

查看" commandToExecute"属性。您可以看到如何使用params调用powershell.exe,脚本文件是其中一个参数,然后脚本文件本身也通过变量接受一些参数。

您也可以使用DSC(在JSON中非常相似,但PS非常相似)但如果您已经有一个PS脚本要使用,这应该可行。

这就是你需要的吗?

答案 1 :(得分:0)

你可以传递这样的变量:

New-AzureRmResourceGroupDeployment -Name ((Get-ChildItem $TemplateFile).BaseName + '-' + ((Get-Date).ToUniversalTime()).ToString('MMdd-HHmm')) `
                            -ResourceGroupName $ResourceGroupName `
                            -TemplateFile $TemplateFile -TemplateParameterObject  @{accountName=$AutomationAccount;moduleName=$Name;moduleURI=$ModuleURI} -Force -Verbose