给定资源组下每个 Vm 的 VMSku 详​​细信息 excel sheet

VMSku detail of each Vm under given resource group in to excel sheet

我正在尝试在 azure devops 管道中使用 azure powershell 任务获取带有其余参数的 VM sku 详细信息。但不是 vmsku 详细信息,excel sheet 在 excel sheet 的所有列中显示“Microsoft.Azure.management.Compute.Models.HardwareProfile”。我在这里做错了什么。我希望得到像“Standard_m32ls”

这样的细节

注意:grep-wildcard 变量 alue 将通过管道传递

report = @()
$niclist = Get-AZNetworkInterface | Where-Object {$_ResourceGroupName -eq '*$(grp-wildcard)' } |Select-Object
$VM =Get-AzVm -Status | Where-Object {$_ResourceGroupName -eq '*$(grp-wildcard) '} |Select-Object
$power= $VM.powerstate
$vms = Get-AzVM | Where-Object {$_ResourceGroupName -eq '*$(grp-wildcard) '} |Select-Object

foreach($nic in $niclist){
Array = "" |Select-Object ResourceGroupName,ServerHostname,VMstatus,VMSKU
$Array.ResourceGroupName = $nic.ResourceGroupName
$Array.ServerHostName =$nic.VirtualMachine.Id
$Array.VMstate = $power[0]
$Array.VMSKU = $vms.HardwareProfile.VmSize[0]
}
$report+=$Array
$report |Format-Table ResourceGroupName,ServerHostname,VMstatus,VMSKU
$report | Export-Csv -NTI -path "$(BuildArtifactStagingDirectory)/test.csv"

此脚本正在获取与您尝试执行的相同的数据:

$rgName = ""
$vms = Get-AzVM -Status | Where-Object { $_.ResourceGroupName -eq $rgName }

$report = @()
foreach ($vm in $vms) {
    $vmResult = @{
        ResourceGroupName = $vm.ResourceGroupName
        ServerHostName = $vm.Id
        VmStatus = $vm.Powerstate
        VmSku = $vm.HardwareProfile.VmSize
    }
    $report += $vmResult
}

$report | Export-Csv -Path "$(BuildArtifactStagingDirectory)/test.csv"

这看起来能满足您的需求

$rgName = ""
$report = @()
Get-AzVm -Status | Select-Object @{N="ServerHostName"; E={$_.VmId}}, Name, ResourceGroupName, @{N="VmSku"; E={$_.HardwareProfile.VmSize}}, @{N="VmStatus"; E={$_.Powerstate}} | Where-Object { $_.ResourceGroupName -eq $rgName } | ForEach-Object $vm { 

    $report += $vm
}
$report | Export-Csv -Path "$(BuildArtifactStagingDirectory)/test.csv"