Invoke-AzureRmVMRunCommand ничего не возвращает в поле вывода при выполнении из Runbook

Я пытаюсь вызвать сценарий PowerShell на виртуальной машине и получить результат выполнения сценария. Я использую командлет Invoke-AzureRmVMRunCommand для вызова сценария на виртуальной машине, как показано ниже.

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

Когда я выполняю вышеуказанный командлет из обычного терминала PowerShell, я получаю ожидаемый результат. Однако всякий раз, когда я помещаю этот оператор в модуль Runbook для автоматизации, я получаю null почти во всех полях, как показано ниже.

введите здесь описание изображения

Я не вижу ничего конкретного по этому поводу в документацию. Я здесь что-то не так делаю?

Любая помощь будет принята с благодарностью! Спасибо.

Обновление: в сценарии я регистрирую вывод с помощью командлета Write-Output.


person Amogh Natu    schedule 12.04.2018    source источник


Ответы (3)


Вам нужно либо добавить имя объекта в последнюю строку вашего скрипта, либо использовать команду Write-Output. В противном случае он ничего не выведет.

Обе следующие строки записывают объект в выходной поток.

  • Запись-вывод –InputObject $ ValidationResult

  • $ ValidationResult

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

Надеюсь это поможет

person Dave Anders    schedule 12.04.2018
comment
У меня это уже есть в сценарии. Спасибо, что указали на это. Позвольте мне прояснить свой вопрос. - person Amogh Natu; 12.04.2018
comment
Пожалуйста, опубликуйте сценарий полностью, а не командную строку, а сценарий Runbook - person Dave Anders; 12.04.2018
comment
К сожалению, я не смогу опубликовать здесь модуль Runbook, но дайте мне знать, если вам понадобится дополнительная информация. - person Amogh Natu; 12.04.2018
comment
Мне нужно увидеть последнюю строчку - person Dave Anders; 12.04.2018
comment
Запись-вывод $ log - person Amogh Natu; 12.04.2018
comment
Это последняя строка в скрипте, который я запускаю на виртуальной машине. - person Amogh Natu; 12.04.2018
comment
Тогда это не $ ValidationResult, поэтому не ожидайте, что он даст тот же результат, что и строка, которую вы изначально предоставили :). Как вы составляете переменную $ log, что она содержит, когда вы запускаете модуль Runbook, скажем, из консоли Powershell? - person Dave Anders; 12.04.2018
comment
Давайте продолжим это обсуждение в чате. - person Amogh Natu; 12.04.2018
comment
Конечно, хотя +1 к моему ответу тоже будет признателен. ;) - person Dave Anders; 12.04.2018
comment
У меня (почти) точно такая же проблема. Invoke-AzureRmVMRunCommand используется для печати вывода, но больше ничего, просто возвращает пустое значение. И я просто запускаю команду на Powershell прямо, а не на Runbook. - person mco; 18.04.2018

Эта проблема, скорее всего, связана с обнаруженной ошибкой в ​​модулях AzureRM, начиная с версии 5.7.0 / апрель 2018 г. Сообщается, что откат до версии 5.6.0 / март 2018 исправит ее. Журнал проблем: https://github.com/Azure/azure-powershell/issues/5982

person Brian Reynolds    schedule 24.04.2018

Приношу свои извинения за задержку с ответом. Я использовал это в модуле Runbook типа Powershell Workflow. Многие командлеты PowerShell ведут себя по-разному при выполнении в рабочих процессах.

Итак, в этом случае происходило то, что команда Invoke-AzureRmVMRunCommand выполнялась правильно, но ответом был только ТИП ответа, а не фактический объект ответа. Следовательно, мне не удалось увидеть никаких значений в свойствах ответа.

Чтобы это сработало, мне пришлось заключить вызов командлета в блок 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/

Спасибо.

person Amogh Natu    schedule 26.04.2018