使用 set-azuremrmvmcustomscriptextension 执行 DSC 文件

Execute DSC File with set-azuremrmvmcustomscriptextension

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

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

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

的 DSC PowerShell 代码

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

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

更新 1

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

这里是我们找出 Args 的地方:

经过多次尝试并确定问题是我如何通过 -Argument 开关传递参数,我发现我的一个参数中有 spaces,因此我尝试按如下方式调用参数,它将单个参数视为多个参数并且没有按预期将其传递到我的脚本中,因为 -Argument 是 space 分隔的。注意:Azure Automation 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"