【问题标题】:Powerstate of Azure VM through powershellAzure VM 通过 powershell 的 Powerstate
【发布时间】:2019-05-31 04:40:59
【问题描述】:

我的脚本片段如下所示:

# 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 以向我显示此数据,但正如我所注意到的,它仅在包含特定资源组名称和虚拟机名称时才有效。

如何更改脚本以将电源状态作为报告的最后一列而不丢弃此脚本并从头开始编写新脚本?

【问题讨论】:

    标签: azure powershell virtual-machine


    【解决方案1】:

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

    查看更多详情here。所以你只需要改变一些像这样的命令:

    $VMs = Get-AzureRmVM -Status
    

    "Powerstate" = $_.PowerState
    

    然后一切都会好起来的。希望这会对你有所帮助。

    【讨论】:

    • 这在我在 Powershell 窗口中运行时确实有效,但在从 Azure Runbook 运行时无效。这是错误注释:Get-AzureRmVM:无法处理命令,因为缺少一个或多个必需参数:ResourceGroupName 名称。在 line:31 char:8 + $VMs = Get-AzureRmVM -status Azure Runbook 很烂。
    • Runbook 版本中的 AzureRm.Compute 模块在创建时为 5.9.0,其中可能存在错误。我在那个版本中遇到了同样的错误。但是您可以将模块更新到版本 5.9.1。然后一切正常。
    • @lubierzca 你用答案解决问题了吗?
    【解决方案2】:

    对此你无能为力,最好的办法是这样做:

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

    所以遍历 vms 变量以获取每个单独的 vm 状态

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-03-10
      • 1970-01-01
      • 1970-01-01
      • 2018-10-31
      • 2013-04-27
      • 1970-01-01
      • 2022-01-19
      相关资源
      最近更新 更多