使用set-azuremrmvmcustomscriptextension执行DSC文件

时间:2017-02-20 23:08:58

标签: powershell azure-automation powershell-dsc

我正在尝试通过Azure自动化Runbook中的set-azuremrmvmcustomscriptextension执行DSC脚本。

我不想使用Azure自动化的DSC,因为我需要执行的Runbook中有其他操作(非DSC),我不想使用set-azurermvmdscextension,因为我的文件不在Blob存储中但可通过set-azurermvmcustomscriptextension提供的fileURI开关访问。

当我通过set-azurermvmcustomscriptextension运行DSC文件(.ps1)时,我没有错误,它会生成本地.mof。但是,它实际上并不在配置括号中执行任何操作,也就是说,需要运行的DSC PowerShell代码。

.ps1具有应用配置的DSC命令。如果我通过PowerShell ISE将服务器远程连接到服务器上运行脚本,那么只有当我从set-azurermvmcustomscriptextension调用它时它才会执行配置(但仍会创建mof)。

游戏中是否存在权限问题? DSC运行在我认为的系统级别,并且在导入模块等时没有产生mof / no错误的问题。就像它只是忽略了配置。

更新1

经过更多测试后,我们发现当我们在Set-AzureRMVMCustomScriptExtension中使用-Argument时,它无法运行DSC配置。删除它允许DSC配置运行...但是,我们需要从Runbook / Set-AzureRMVMCustomScriptExtension传递正确的参数,以使其具有正确的值。

我们在这里找到了Args:How can I pass multiple arguments to Set-AzureRmVMCustomScriptExtension?

1 个答案:

答案 0 :(得分:0)

经过多次尝试并隔离问题是我如何通过-Argument开关传递参数,我发现我的一个参数中有空格,所以我试着调用如下的参数,它看到单个参数为因为-Argument是空格分隔的,所以我没有将这个传递到我的脚本中。注意:Azure自动化Runbook提示输入值:

Input for Value 1: myvalue1
Input for Value 2: my value 2 

[parameter(Mandatory=$true)][String] $value1,  
[parameter(Mandatory=$true)][String] $value2

-Argument "$value1 value2"

# Value 1 seen as myvalue1, while Value 2 seen as three separate values of "my" "value" "2" since -Argument is space delimited.

更改此项以转义$ value2参数修复了该问题,如下所示:

Input for Value 1: myvalue1
Input for Value 2: my value 2 

[parameter(Mandatory=$true)][String] $value1,  
[parameter(Mandatory=$true)][String] $value2

-Argument "$value1 `"value2`""

# Value 1 seen as myvalue1, while Value 2 seen as "my value 2"