我使用 Azure 资源管理器创建了一个包含几个 VM 和其他资源的资源组。
如何读取使用 Azure 资源管理器 (ARM) 作为资源组中的资源预配的 VM 的 VM 状态?
对于经典 VM,旧脚本使用:
$vm.InstanceStatus
但是,当我切换到 Azure 资源管理器模式时
Switch-AzureMode AzureResourceManager
VM 对象无法将 .InstanceStatus 识别为有效变量。
我使用 Azure 资源管理器创建了一个包含几个 VM 和其他资源的资源组。
如何读取使用 Azure 资源管理器 (ARM) 作为资源组中的资源预配的 VM 的 VM 状态?
对于经典 VM,旧脚本使用:
$vm.InstanceStatus
但是,当我切换到 Azure 资源管理器模式时
Switch-AzureMode AzureResourceManager
VM 对象无法将 .InstanceStatus 识别为有效变量。
您正在寻找的 PowerShell one-liner 可能看起来像这样:
Get-AzureRmVM -ResourceGroupName "MyRGName" -Name "MyVmName" -Status | `
select -ExpandProperty Statuses | `
?{ $_.Code -match "PowerState" } | `
select -ExpandProperty DisplayStatus
这将显示VM deallocated
VM 是否已停止或VM running
正在运行。
要获取Get-AzureRmVm
cmdlet,请运行以下命令:
Install-Package AzureRM
Install-AzureRM
嗨,由于上面的示例,我提供了一个脚本来执行此操作。
https://miteshc.wordpress.com/2016/02/24/automation-runbook-shutdown-azurearmvm-with-tags/
提炼
$ResourceGroup = "RG_Name" $VMs = Find-AzureRmResource -ResourceGroupNameContains $ResourceGroup |
Where-Object {$_.Tags.Name-eq "Autoshutdown" -and $_.Tags.Value -eq "Yes"}
Foreach ($VM in $VMs)
{
$VMStatus = Get-AzureRmVM -ResourceGroupName $ResourceGroup -Name $vm.Name -Status |
选择 -ExpandProperty 状态 | ?{ $_.Code -match "PowerState" } | 选择 -ExpandProperty 显示状态
if($VMStatus -eq "VM Running")
{
Write-Output "status of" $vm.Name "is" """$VMStatus"""
Stop-AzureRmVM -ResourceGroupName $ResourceGroup -Name $vm.Name -Force
}
else
{
Write-Output "status of" $vm.Name "is" """$VMStatus"""
}
}
谢谢 !米特什
尝试以下操作:
Get-AzureVM -ResourceGroupName <RGName> -Name <VMName> -Status
结果,您应该看到状态,并且在其中您应该看到一个看起来像“PowerState/running”等的状态。
希望这可以帮助!:)
您可以使用下面的 PowerShell 代码读取在 ARM 下预配的 Azure VM 的预配状态:
$vm = Get-AzureRmVM -Name <VMName> -ResourceGroupName <ResourceGroupName>
$vm.ProvisioningState
这是使用 2015 年 11 月发布的最新 Azure PowerShell 修订版 (1.0.1) 进行测试的。