获取 azure 磁盘信息 csv

时间:2021-05-17 10:30:57

标签: azure powershell

嗨,我正在尝试获取 azure 虚拟机的磁盘信息和网络信息。

我可能在做一些愚蠢的事情,但我认为将 vm 添加到网络 foreach 循环中。

我已经把脚本放在下面了,谁能看出我哪里出错了?

$reportName = "sample.csv"
$report = @()
$vms = Get-AzVM

$publicIps = Get-AzPublicIpAddress 
$nics = Get-AzNetworkInterface | ?{ $_.VirtualMachine -NE $null} 
foreach ($nic in $nics) { 
    $info = "" | Select VmName, ResourceGroupName, Region, VmSize, VirturalNetwork, Subnet, DnsServers, NicDns, PrivateIpAddress, OsType, OSDisk, DiagDisk, DataDisk, PublicIPAddress, vCPU, Memory
    $vm = $vms | ? -Property Id -eq $nic.VirtualMachine.id 
    foreach($publicIp in $publicIps) { 
        if($nic.IpConfigurations.id -eq $publicIp.ipconfiguration.Id) {
            $info.PublicIPAddress = $publicIp.ipaddress
            } 
        } 

        #$location = $vm.location
        $info.OsType = $vm.StorageProfile.OsDisk.OsType 
        $info.VMName = $vm.Name 
        $info.ResourceGroupName = $vm.ResourceGroupName 
        $info.Region = $vm.Location 
        $info.VmSize = $vm.HardwareProfile.VmSize
        $size = $info.VmSize = $vm.HardwareProfile.VmSize
        $info.vCPU = (Get-AzVMSize -Location $location | ? {$_.name -eq $size}).NumberOfCores
        $info.Memory = (Get-AzVMSize -Location $location | ? {$_.name -eq $size}).MemoryInMB
        $info.VirturalNetwork = $nic.IpConfigurations.subnet.Id.Split("/")[-3] 
        $info.Subnet = $nic.IpConfigurations.subnet.Id.Split("/")[-1] 
        $info.PrivateIpAddress = $nic.IpConfigurations.PrivateIpAddress 
        $vm = get-azvm | ? {$_.name -eq $vm}
        foreach ($vms in $vm) {
        $info.OSDiskSizeGB = $vm.StorageProfile.OsDisk.DiskSizeGB
        $info.OSDisk = $vm.StorageProfile.OsDisk.Vhd.uri
        $info.DiagDisk = $vm.DiagnosticsProfile.BootDiagnostics.StorageUri
        $info.DataDisk = $vm.StorageProfile.DataDisks.vhd.uri -join "**"
        }

        $report+=$info 
    } 
$report | ft VmName, ResourceGroupName, Region, VmSize, VirturalNetwork, Subnet, DnsServers, NicDns, PrivateIpAddress, OsType, OSDisk, DiagDisk, DataDisk, PublicIPAddress, vCPU, Memory 
$report | Export-CSV "c:\temp\$reportName"

提前致谢:)

编辑:

这是我得到的输出,没有任何虚拟机的磁盘信息

VmName    ResourceGroupName Region     VmSize         VirturalNetwork Subnet  DnsServers NicDns PrivateIpAddress  OsType OSDisk DiagDisk DataDisk PublicIPAddress vCPU Memory
------    ----------------- ------     ------         --------------- ------  ---------- ------ ----------------  ------ ------ -------- -------- --------------- ---- ------
vmr1-sec1 DEPLOYRG1         westeurope Standard_D2_v4 av-vnet         av-sub2                   172.0.2.4        Windows                                             2   8192
vmr2-sec1 DEPLOYRG1         westeurope Standard_D2_v4 av-vnet         av-sub2                   172.0.2.5        Windows                                             2   8192
cks-cp1   K8S               westeurope Standard_B2s   K8S-vnet        default                   10.0.0.4           Linux                          20.71.120.71       2   4096

1 个答案:

答案 0 :(得分:0)

目前,Azure 默认使用 Azure 托管磁盘。默认情况下,Azure 托管磁盘不再存储到 blob 存储中。详情请参阅herehere。如果要获取 Azure 托管磁盘的 vhd URL,则需要运行命令 mixedsort 来获取它。 但请注意,网址是有生命周期的,过一段时间就会过期

所以我建议您将磁盘名称或磁盘 ID 存储在 CSV 文件中

相关问题