我如何简单地从Azure中的Powershell工作流程自动化运行手册中获取电源状态?

问题描述 投票:0回答:2

我有一个Powershell工作流运行手册,该手册可以自动启动和关闭Azure中的VM,我更新了自动化帐户中的模块(以便可以将其用于其他用途),并且该脚本已停止工作。我已经修复了大多数损坏的东西,但是现在不起作用的位是获取电源状态,例如: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"

Write-Output VM状态代码现在在Runbook的输出中为空白,但在标准Shell中输出正常。我在工作流操作手册方面的经验有限,但我认为需要将其转换为Json,以便工作流可以使用它。

我认为问题可能在于状态,因为当它转换为显示的Json时:

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

现在不显示PowerState。如何从Powershell工作流运行手册中获取VM的电源状态,以便可以使用?谢谢

azure powershell workflow runbook
2个回答
0
投票

我尝试了内联脚本,如果您指定了虚拟机名称,它确实可以工作:

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

它需要在没有内置脚本的情况下运行-有什么想法吗?


0
投票

忘记添加$ 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
                    }

现在可以使用!

© www.soinside.com 2019 - 2024. All rights reserved.