Azure VM 通过 powershell 的 Powerstate

Posted

技术标签:

【中文标题】Azure VM 通过 powershell 的 Powerstate【英文标题】:Powerstate of Azure VM through powershell 【发布时间】: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 以向我显示此数据,但正如我所注意到的,它仅在包含特定资源组名称和虚拟机名称时才有效。

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

【问题讨论】:

【参考方案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 状态

【讨论】:

以上是关于Azure VM 通过 powershell 的 Powerstate的主要内容,如果未能解决你的问题,请参考以下文章

通过PowerShell命令给Azure VM添加CustomScriptExtension

Azure上采用Powershell从已有的VHD创建VM

无法使用 azure powershell 创建 VM

如何使用Powershell脚本获取Azure VM来宾指标(性能计数器)

powershell 我的Azure VM powershell模块用于管理VM

powershell 使用powershell创建用于测试SQL的Azure VM