我有一个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的电源状态,以便可以使用?谢谢
我尝试了内联脚本,如果您指定了虚拟机名称,它确实可以工作:
$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.
它需要在没有内置脚本的情况下运行-有什么想法吗?
忘记添加$ 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
}
现在可以使用!