0

我有一个 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"

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

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

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

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

4

2 回答 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.

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

于 2020-06-05T16:13:31.353 回答
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
                    }

这现在有效!

于 2020-06-08T08:06:49.157 回答