1

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

我不想使用 Azure 自动化的 DSC,因为我的运行手册中还有其他操作需要执行(非 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 的地方:如何将多个参数传递给 Set-AzureRmVMCustomScriptExtension?

4

1 回答 1

1

在多次尝试并隔离问题是我如何通过 -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"
于 2017-02-22T17:30:24.290 回答