我尝试将PowerShell脚本调用到虚拟机并检索脚本的输出。我使用 Invoke-AzureRmVMRunCommand cmdlet调用VM上的脚本,如下所示。
$ValidationResult = Invoke-AzureRmVMRunCommand -ResourceGroupName $VM.ResourceGroupName -VMName $VM.Name -CommandId "RunPowerShellScript" -ScriptPath $ValidationScript
当我从常规的PowerShell终端执行上面的cmdlet时,我得到了预期的输出。但是,每当我将此语句放入自动化Runbook中时,我几乎在所有字段中都显示为null,如下所示
我也不会在documentation中看到任何特定内容。我在这里做错了吗?
任何帮助将不胜感激!谢谢。
更新 在脚本中,我使用Write-Output cmdlet记录输出。
答案 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变量。
感谢。