如何让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
相关产品推荐
相关产品推荐

