powershell中的数组被覆盖

w8f9ii69  于 2023-01-13  发布在  Shell
关注(0)|答案(1)|浏览(196)

我正在编写查询以捕获Azure虚拟机磁盘详细信息并将其保存在阵列中。此虚拟机有两个磁盘。遗憾的是,我的阵列被第二个磁盘覆盖。即,第二个磁盘的详细信息出现两次,而不是每个磁盘的每一行。

$t = @()
$array =@()
foreach ($disk in $r.storageProfile.DataDisks.Name) {
    $t= Get-AzDisk -ResourceGroupName $ResourceGroupName -DiskName $disk
    $ReportDetails.VMName =  $r.Name 
    $ReportDetails.DiskName =  $t.Name  
    $ReportDetails.DiskSizeGB=  $t.DiskSizeGB
    $ReportDetails.sku=  $t.Sku.Name  
    $ReportDetails.Lun=  ($r.storageProfile.DataDisks | Where-Object -filterscript {$_.Name -eq $disk}).lun
    $ReportDetails.Caching=  ($r.storageProfile.DataDisks | Where-Object -filterscript {$_.Name -eq $disk}).Caching
    $ReportDetails.DiskIOPSReadWrite=   $t.DiskIOPSReadWrite  
    $ReportDetails.DiskMBpsReadWrite =  $t.DiskMBpsReadWrite
    $ReportDetails 

    $array += $ReportDetails  
}
$array | Out-GridView

当我打印$ReportDetails的值时,它在两次迭代中正确地显示了正确的数据。
但是,array()两次显示第二个磁盘。

zbdgwd5y

zbdgwd5y1#

根本不确定变量$ReportDetails是什么样的,但我认为您的意思是获得一个对象数组,这些对象具有关于每个磁盘的选定属性。
大概是这样的

$array = foreach ($diskName in $r.storageProfile.DataDisks.Name) {
    $azDisk   = Get-AzDisk -ResourceGroupName $ResourceGroupName -DiskName $diskName
    $dataDisk = $r.storageProfile.DataDisks | Where-Object {$_.Name -eq $diskName}
    [PsCustomObject]@{
        VMName            = $r.Name
        DiskName          = $azDisk.Name
        DiskSizeGB        = $azDisk.DiskSizeGB
        sku               = $azDisk.Sku.Name
        Lun               = $dataDisk.lun
        Caching           = $dataDisk.Caching
        DiskIOPSReadWrite = $azDisk.DiskIOPSReadWrite
        DiskMBpsReadWrite = $azDisk.DiskMBpsReadWrite
    }
}
$array | Out-GridView

相关问题