从 Runbook 执行时,Invoke-AzureRmVMRunCommand 在 "Output" 字段中不返回任何内容
Invoke-AzureRmVMRunCommand not returning anything in "Output" field when executing from Runbook
我试图在虚拟机上调用 powershell 脚本并检索脚本的输出。我正在使用 Invoke-AzureRmVMRunCommand cmdlet 在 VM 上调用脚本,如下所示。
$ValidationResult = Invoke-AzureRmVMRunCommand -ResourceGroupName $VM.ResourceGroupName -VMName $VM.Name -CommandId "RunPowerShellScript" -ScriptPath $ValidationScript
当我从常规 powershell 终端执行上述 cmdlet 时,我得到了预期的输出。但是,每当我将此语句放入自动化运行手册中时,几乎所有字段都会出现空值,如下所示
我在 documentation 中也没有看到任何具体内容。我是不是做错了什么?
如有任何帮助,我们将不胜感激!谢谢。
更新:
在脚本中,我使用 Write-Output cmdlet 记录输出。
您需要在脚本的最后一行添加对象名称或使用 Write-Output 命令。否则它不会输出任何东西。
以下两行都将对象写入输出流。
Write-Output –InputObject $ValidationResult
$ValidationResult
https://docs.microsoft.com/en-us/azure/automation/automation-runbook-output-and-messages
希望这对您有所帮助
此问题很可能是由于从 5.7.0 版/2018 年 4 月开始的 AzureRM 模块中报告的错误所致。据报道回滚到 2018 年 3 月版 5.6.0 可以修复该问题。问题日志:https://github.com/Azure/azure-powershell/issues/5982
对于延迟回复,我深表歉意。我在 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 变量。
这里给出了更详细的post:https://amoghnatu.net/2018/04/15/get-output-of-script-executed-as-part-of-set-azurermvmcustomscriptexecution-cmdlet/
谢谢。
我试图在虚拟机上调用 powershell 脚本并检索脚本的输出。我正在使用 Invoke-AzureRmVMRunCommand cmdlet 在 VM 上调用脚本,如下所示。
$ValidationResult = Invoke-AzureRmVMRunCommand -ResourceGroupName $VM.ResourceGroupName -VMName $VM.Name -CommandId "RunPowerShellScript" -ScriptPath $ValidationScript
当我从常规 powershell 终端执行上述 cmdlet 时,我得到了预期的输出。但是,每当我将此语句放入自动化运行手册中时,几乎所有字段都会出现空值,如下所示
我在 documentation 中也没有看到任何具体内容。我是不是做错了什么?
如有任何帮助,我们将不胜感激!谢谢。
更新: 在脚本中,我使用 Write-Output cmdlet 记录输出。
您需要在脚本的最后一行添加对象名称或使用 Write-Output 命令。否则它不会输出任何东西。
以下两行都将对象写入输出流。
Write-Output –InputObject $ValidationResult
$ValidationResult
https://docs.microsoft.com/en-us/azure/automation/automation-runbook-output-and-messages
希望这对您有所帮助
此问题很可能是由于从 5.7.0 版/2018 年 4 月开始的 AzureRM 模块中报告的错误所致。据报道回滚到 2018 年 3 月版 5.6.0 可以修复该问题。问题日志:https://github.com/Azure/azure-powershell/issues/5982
对于延迟回复,我深表歉意。我在 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 变量。
这里给出了更详细的post:https://amoghnatu.net/2018/04/15/get-output-of-script-executed-as-part-of-set-azurermvmcustomscriptexecution-cmdlet/
谢谢。