Как я могу просто получить состояние питания из модуля Runbook автоматизации рабочего процесса PowerShell в Azure?

У меня есть модуль Runbook рабочего процесса Powershell, который автоматизирует запуск и завершение работы виртуальных машин в Azure, я обновил модули в учетной записи автоматизации (чтобы использовать ее для других целей), и это остановило работу сценария. Я исправил большинство сломанных вещей, но бит, который сейчас не работает, получает состояние питания, например: PowerState/deallocated, чтобы его можно было выключить/запустить. Вот мой код:

$vmFullStatus = Get-AzureRmVM -ResourceGroupName test1 -Name test1 -Status
$vmStatusJson = $vmFullStatus | ConvertTo-Json -depth 100
$vmStatus = $vmStatusJson | ConvertFrom-Json
$vmStatusCode = $vmStatus.Statuses[1].code
Write-Output "     VM Status Code: $vmStatusCode"

Код состояния виртуальной машины записи-вывода теперь пуст в выходных данных модуля Runbook, но в стандартной оболочке он выводится нормально. У меня ограниченный опыт работы с модулями Runbook рабочего процесса, но я считаю, что его необходимо преобразовать в Json, чтобы рабочий процесс мог его использовать.

Я думаю, что проблема может заключаться в статусах, поскольку при преобразовании в Json отображается:

"Statuses":  [
                 "Microsoft.Azure.Management.Compute.Models.InstanceViewStatus",
                 "Microsoft.Azure.Management.Compute.Models.InstanceViewStatus"
             ],

Который теперь не показывает PowerState. Как я могу получить состояние питания виртуальной машины из модуля Runbook рабочего процесса PowerShell, чтобы его можно было использовать? Спасибо


person Dave Wills    schedule 05.06.2020    source источник


Ответы (2)


Я пробовал встроенный скрипт, и он работает, если вы укажете имя виртуальной машины:

$vmStatusCode = InlineScript {
$vmFullStatus = Get-AzureRmVM -ResourceGroupName test1 -Name test1 -Status
$vmStatusJson = $vmFullStatus | ConvertTo-Json -depth 100
$vmStatus = $vmStatusJson | ConvertFrom-Json
$vmStatus.Statuses[1].code
}

Но это не работает, когда вы передаете переменные:

$vmFullStatus = Get-AzureRmVM -ResourceGroupName $vm.ResourceGroupName -Name $vm.Name -Status


Get-AzureRmVM : Cannot validate argument on parameter 'ResourceGroupName'. The argument is null or empty. Provide an 
argument that is not null or empty, and then try the command again.

его нужно запускать без встроенного скрипта - есть идеи?

person Dave Wills    schedule 05.06.2020

забыл добавить $using:

$vmStatusCode = InlineScript {
                    $vmFullStatus = Get-AzureRmVM -ResourceGroupName $using:vm.ResourceGroupName -Name $using:vm.Name -Status
                    $vmStatusJson = $vmFullStatus | ConvertTo-Json -depth 100
                    $vmStatus = $vmStatusJson | ConvertFrom-Json
                    $vmStatus.Statuses[1].code
                    }

Теперь это работает!

person Dave Wills    schedule 08.06.2020