You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让PowerShell脚本动态显示Azure VM所有数据磁盘大小?

动态展示Azure虚拟机所有数据磁盘的PowerShell脚本优化

Azure虚拟机支持挂载多个数据磁盘,但原有脚本需要手动添加dataNdiskingb字段才能展示不同数据磁盘的容量,当磁盘数量较多时操作十分繁琐。以下是优化后的脚本,可自动动态展示所有数据磁盘信息:

Get-AzVM | ForEach-Object {
    $vm = $_
    # 获取VM规格信息
    $vmSize = Get-AzVMSize -VMName $vm.Name -ResourceGroupName $vm.ResourceGroupName | Where-Object Name -eq $vm.HardwareProfile.VmSize
    # 获取网卡及私有IP
    $nicName = $vm.NetworkProfile.NetworkInterfaces.Id.Split('/')[-1]
    $nic = Get-AzNetworkInterface -Name $nicName -ResourceGroupName $vm.ResourceGroupName
    $privateIp = $nic.IpConfigurations.PrivateIpAddress

    # 初始化基础属性有序哈希表
    $vmProperties = [ordered]@{
        Location       = $vm.Location
        Name           = $vm.Name
        OsDiskSizeGB   = $vm.StorageProfile.OsDisk.DiskSizeGB
        MemoryGB       = [Math]::Round($vmSize.MemoryInMB / 1024, 1)
        CPUCount       = $vmSize.NumberOfCores
        NicName        = $nicName
        PrivateIp      = $privateIp
        VMTags         = $vm.Tags
        VMStatusCode   = $vm.StatusCode
        ProvisionState = $vm.ProvisioningState
    }

    # 动态添加所有数据磁盘的容量属性
    if ($vm.StorageProfile.DataDisks.Count -gt 0) {
        foreach ($disk in $vm.StorageProfile.DataDisks) {
            $diskIndex = $vm.StorageProfile.DataDisks.IndexOf($disk) + 1
            $vmProperties["DataDisk${diskIndex}SizeGB"] = $disk.DiskSizeGB
        }
    }

    # 输出自定义对象
    [pscustomobject]$vmProperties
} | Out-GridView

关键优化说明

  • 动态适配磁盘数量:遍历虚拟机的DataDisks集合,自动生成DataDisk1SizeGB、DataDisk2SizeGB等格式的属性,无需手动添加字段
  • 提升执行效率:提前获取完整的网卡对象,避免重复调用Azure API
  • 规范属性命名:统一属性命名格式,让输出结果更易读和处理
  • 有序属性输出:使用[ordered]哈希表保证输出对象的属性顺序与定义一致

内容的提问来源于stack exchange,提问作者Senior Systems Engineer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 03:06:22