如何将多个参数传递给Set-AzureRmVMCustomScriptExtension?

时间:2017-02-15 22:54:04

标签: powershell azure

用于向名为Set-AzureRmVMCustomScriptExtension的VM添加自定义脚本扩展的Azure Cmdlet具有-Argument开关,该开关表明它接受字符串,但没有示例如何实现。虽然它说它可以接受多个参数,但它似乎只是一个参数。

我需要传递多个参数,但无法找到正确的语法。

示例:

$arg1 = "mysitename"
$arg2 = "c:/mydirectorytocreate"

-Argument "$arg1,$arg2"

如何将多个参数传递给Set-AzureRmVMCustomScriptExtension,以便将这些值传递给需要这些值的实际脚本(例如,将IIS站点名称和目录路径作为两个单独的值传递)。

2 个答案:

答案 0 :(得分:4)

this blog中有一个使用多个参数的示例:

Set-AzureVMCustomScriptExtension -VM $x -ContainerName 'test' -FileName 'script1.ps1','script2.ps1','script3.ps1' -Run 'script1.ps1' -Argument 'arg1 arg2' 
      | Update-AzureVM  

如果此代码snipett确实有效,则表示您需要为参数传递空格分隔字符串。只需确保保留双引号,以便变量正确扩展。

答案 1 :(得分:0)

不确定此cmdlet的ASM(经典)和ARM版本之间是否存在差异,但对我而言,我必须这样做(为清晰起见,参数缺失):

$arguments = "-arg1 'foo' -arg2 'bar' -arg3 'cat'"

Set-AzureRmVMCustomScriptExtension `
    -Argument $Arguments `
    -Run "SomeScript.ps1"

SomeScript.ps1看起来像:

param
(
    [string]$arg1,
    [string]$arg2,
    [string]$arg3
)

function SomeFunction
{
    Write-Host $arg1
    Write-Host $arg2
    Write-Host $arg3

    #Do something here...
}
SomeFunction -arg1 $arg1 -arg2 $arg2 -arg3 $arg3 #Call the function from within SomeScript.ps1

如果从自定义脚本扩展运行时实际上可以看到Write-Host的输出,则会产生以下输出:

foo
bar
cat

HTH。