通过Powershell的Azure VM的电源状态

时间:2019-01-04 15:26:41

标签: azure powershell virtual-machine

我的脚本片段如下:

# Collection of data
$VMs = Get-AzureRmVM
$vmOutput = $VMs | ForEach-Object { 
    [PSCustomObject]@{
        "VM Name" = $_.Name
        "VM Type" = $_.StorageProfile.osDisk.osType
        "VM Profile" = $_.HardwareProfile.VmSize
        "Environment" = $_.Tags.Environment
        "Application" = $_.Tags.Application
        "Decommission Date" = $_.Tags.Decomission
        "OS Disk Size" = $_.StorageProfile.OsDisk.DiskSizeGB
        "Data Disks Total Size" = ($_.StorageProfile.DataDisks.DiskSizeGB | Measure -Sum).Sum
        "Data Disks Amount" = ($_.StorageProfile.DataDisks.DiskSizeGB | Measure ).Count
        "Powerstate" = $_.Statuses[1].DisplayStatus
    }
}

$vmOutput | sort "Environment", "VM Type", "VM Profile", "Application" | export-csv VMReport.csv -delimiter ";" -force -notypeinformation 

我想在报告中添加电源状态列,但它不包含在 Get-AzureRMVM 属性中。我必须在命令末尾添加 -status 才能显示此数据,但是正如我已经注意到的那样,它仅在包含特定资源组名称和虚拟机名称时才起作用。

如何更改脚本以将电源状态包括在报告的最后一列中,而又不丢掉该脚本并从头开始编写新的脚本?

2 个答案:

答案 0 :(得分:1)

  

实例视图是虚拟机的实例级别状态。   指定Status参数以仅获取一个实例的视图   虚拟机。

查看更多详细信息here。因此,您只需要更改以下命令:

$VMs = Get-AzureRmVM -Status

"Powerstate" = $_.PowerState

然后一切都会好的。希望对您有帮助。

答案 1 :(得分:0)

您对此无能为力,最好的选择是这样做:

$vms = $vms | foreach-object { $_ | Get-AzRmVm -status }

因此遍历vms变量以获得每个单独的vm状态