首页 > 解决方案 > 在 Azure 中,使用 azure devops 管道中的 powershell 脚本将负载平衡器详细信息写入 csv 文件

问题描述

Csv 文件应包含 ResourceGroupName、FrontendIpConfigurationsName、FrontIPAddress、VMstatus。我编写了以下代码。我在 csv 文件中获取详细信息,但问题是 FrontendIpConfigurationsName 以相同的名称开头出现在同一行,如 ersfrontend-A1、ersfrontend-B2、ersfrontend- B3,ersfrontend-D1,以及与名称相关的 IP 在不同的列中但在同一行中。但我希望它们出现在不同的行中。请建议

report = @()
$LBlist = Get-AZLoadBalancer | Where-Object {$_ResourceGroupName -eq '*$(grp-wildcard)' } |Select-Object
$VM =Get-AzVm -Status | Where-Object {$_ResourceGroupName -eq '*$(grp-wildcard) '} |Select-Object
$power= $VM.powerstate
foreach($LB in LBlist){
Array = "" |Select-Object ResourceGroupName,FrontendIpConfigurationsName,FrontIPAddress,VMstatus
$Array.ResourceGroupName = $LB.ResourceGroupName
$Array.FrontendIpConfigurationsName =($LB.FrontendIpConfigurationsName.name -join ',')
$Array.FrontendIpAddress= ($LB.FrontendIpConfigurationsName.privateIpAddress -join ',')
$Array.VMstate = $power
}
$report+=$Array
$report |Format-Table ResourceGroupName,FrontendIpConfigurationsName,FrontIPAddress,VMstatus
$report | Export-Csv -NTI -path "$(BuildArtifactStagingDirectory)/LBlist.csv"

标签: azurepowershellazure-powershell

解决方案


为了创建带有标题和数据行的正确 CSV 文件,您需要收集对象数组并将其发送到 Export-Csv cmdlet。

例如

$report = @()

foreach($LB in $LBlist){
   $obj= [PsCustomObject]@{
            'ResourceGroupName '     = $LB.ResourceGroupName
            'FrontendIpConfigurationsName '   =($LB.FrontendIpConfigurationsName.name -join ',')
            'FrontendIpAddress' =($LB.FrontendIpConfigurationsName.privateIpAddress -join ',')
            'VMstate '  = $power
        }

 $report += $obj  
}

$report |Format-Table ResourceGroupName,FrontendIpConfigurationsName,FrontIPAddress,VMstatus
$report | Export-Csv -NTI -path "($BuildArtifactStagingDirectory)/LBlist.csv" -NoTypeInformation

希望有帮助


推荐阅读