2

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

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

当我从常规的 powershell 终端执行上述 cmdlet 时,我得到了预期的输出。但是,每当我将此语句放在自动化运行手册中时,我几乎在所有字段中都为空,如下所示

在此处输入图像描述

我在文档中也没有看到任何具体的内容。我在这里做错了吗?

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

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

4

3 回答 3

1

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

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

  • 写输出 –InputObject $ValidationResult

  • $验证结果

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

希望这可以帮助

于 2018-04-12T10:18:48.577 回答
0

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

于 2018-04-24T20:19:39.607 回答
0

我对延迟回复表示歉意。我在Powershell Workflow类型的运行手册中使用它。许多 PowerShell cmdlet 在工作流中执行时表现不同。

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

为了完成这项工作,我必须将 cmdlet 调用包装在一个InlineScript {}块中。

$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/

谢谢。

于 2018-04-26T18:40:04.787 回答