Invoke-AzureRmVMRunCommand不返回"输出"从Runbook执行时的字段

时间:2018-04-12 10:03:51

标签: powershell azure-resource-manager azure-automation azure-runbook

我尝试将PowerShell脚本调用到虚拟机并检索脚本的输出。我使用 Invoke-AzureRmVMRunCommand cmdlet调用VM上的脚本,如下所示。

$ValidationResult = Invoke-AzureRmVMRunCommand -ResourceGroupName $VM.ResourceGroupName -VMName $VM.Name -CommandId "RunPowerShellScript" -ScriptPath $ValidationScript

当我从常规的PowerShell终端执行上面的cmdlet时,我得到了预期的输出。但是,每当我将此语句放入自动化Runbook中时,我几乎在所有字段中都显示为null,如下所示

enter image description here

我也不会在documentation中看到任何特定内容。我在这里做错了吗?

任何帮助将不胜感激!谢谢。

更新 在脚本中,我使用Write-Output cmdlet记录输出。

3 个答案:

答案 0 :(得分:1)

您需要在脚本的最后一行添加对象名称或使用Write-Output命令。否则它不会输出任何东西。

以下行都将对象写入输出流。

  • Write-Output -InputObject $ ValidationResult

  • $为ValidationResult

https://docs.microsoft.com/en-us/azure/automation/automation-runbook-output-and-messages

希望这有帮助

答案 1 :(得分:0)

此问题很可能是由于从版本5.7.0 / 2018年4月开始报告的AzureRM模块中的错误。据报道,回滚到版本5.6.0 / 2018年3月将修复它。问题日志:https://github.com/Azure/azure-powershell/issues/5982

答案 2 :(得分:0)

对于延迟回复我抱歉。我在 Powershell 工作流程 类型的Runbook中使用它。在工作流程中执行时,许多PowerShell cmdlet的行为都不同。

所以在这种情况下,发生的事情是Invoke-AzureRmVMRunCommand正在正确执行,但响应只是响应的TYPE而不是实际的响应对象。因此,我无法在响应的属性中看到任何值。

为了使这项工作,我必须在InlineScript {}块中包装cmdlet调用。

$ValidationResult = InlineScript {
    $result = Invoke-AzureRmVMRunCommand -ResourceGroupName $USING:VM.ResourceGroupName -VMName $USING:VM.Name -CommandId "RunPowerShellScript" -ScriptPath $USING:ValidationScript

    $result.SubStatuses[0].Message
}

结果返回$ ValidationResult变量。

更详细的帖子在这里给出:https://amoghnatu.net/2018/04/15/get-output-of-script-executed-as-part-of-set-azurermvmcustomscriptexecution-cmdlet/

感谢。