Modules/Public/InventoryModules/Network_1/LoadBalancer.ps1
<# .Synopsis Inventory for Azure LoadBalancer .DESCRIPTION This script consolidates information for all microsoft.network/loadbalancers and resource provider in $Resources variable. Excel Sheet Name: LoadBalancer .Link https://github.com/microsoft/ARI/Modules/Public/InventoryModules/Network_1/LoadBalancer.ps1 .COMPONENT This powershell Module is part of Azure Resource Inventory (ARI) .NOTES Version: 3.6.0 First Release Date: 19th November, 2020 Authors: Claudio Merola and Renato Gregio #> <######## Default Parameters. Don't modify this ########> param($SCPath, $Sub, $Intag, $Resources, $Retirements, $Task ,$File, $SmaResources, $TableStyle, $Unsupported) If ($Task -eq 'Processing') { $LoadBalancer = $Resources | Where-Object { $_.TYPE -eq 'microsoft.network/loadbalancers' } if($LoadBalancer) { $tmp = foreach ($1 in $LoadBalancer ) { $ResUCount = 1 $sub1 = $SUB | Where-Object { $_.Id -eq $1.subscriptionId } $data = $1.PROPERTIES $Orphaned = if([string]::IsNullOrEmpty($data.backendAddressPools.id)){$true}else{$false} $Retired = Foreach ($Retirement in $Retirements) { if ($Retirement.id -eq $1.id) { $Retirement } } if ($Retired) { $RetiredFeature = foreach ($Retire in $Retired) { $RetiredServiceID = $Unsupported | Where-Object {$_.Id -eq $Retired.ServiceID} $tmp0 = [pscustomobject]@{ 'RetiredFeature' = $RetiredServiceID.RetiringFeature 'RetiredDate' = $RetiredServiceID.RetirementDate } $tmp0 } $RetiringFeature = if ($RetiredFeature.RetiredFeature.count -gt 1) { $RetiredFeature.RetiredFeature | ForEach-Object { $_ + ' ,' } }else { $RetiredFeature.RetiredFeature} $RetiringFeature = [string]$RetiringFeature $RetiringFeature = if ($RetiringFeature -like '* ,*') { $RetiringFeature -replace ".$" }else { $RetiringFeature } $RetiringDate = if ($RetiredFeature.RetiredDate.count -gt 1) { $RetiredFeature.RetiredDate | ForEach-Object { $_ + ' ,' } }else { $RetiredFeature.RetiredDate} $RetiringDate = [string]$RetiringDate $RetiringDate = if ($RetiringDate -like '* ,*') { $RetiringDate -replace ".$" }else { $RetiringDate } } else { $RetiringFeature = $null $RetiringDate = $null } $Tags = if(![string]::IsNullOrEmpty($1.tags.psobject.properties)){$1.tags.psobject.properties}else{'0'} $FrontEnds = foreach ($2 in $data.frontendIPConfigurations) { if (![string]::IsNullOrEmpty($2.properties.subnet.id)) { $tmps = [pscustomobject]@{ Name = $2.name Fronttarget = $2.properties.subnet.id.split('/')[8] FrontType = 'VNET' frontsub = $2.properties.subnet.id.split('/')[10] } $tmps } elseif (![string]::IsNullOrEmpty($2.properties.publicIPAddress.id)) { $tmps = [pscustomobject]@{ Name = $2.name Fronttarget = $2.properties.publicIPAddress.id.split('/')[8] FrontType = 'Public IP' frontsub = $null } $tmps } } $Backends = $data.backendAddressPools.count $BackendState = if(![string]::IsNullOrEmpty($data.backendAddressPools.properties.loadBalancerBackendAddresses)){'In Use'}else{'Not In Use'} $Probes = $data.probes.count $FrontEnds = if(![string]::IsNullOrEmpty($FrontEnds)){$FrontEnds}else{'0'} foreach ($FrontEnd in $FrontEnds) { foreach ($Tag in $Tags) { $obj = @{ 'ID' = $1.id; 'Subscription' = $sub1.Name; 'Resource Group' = $1.RESOURCEGROUP; 'Name' = $1.NAME; 'Location' = $1.LOCATION; 'SKU' = $1.sku.name; 'Retiring Feature' = $RetiringFeature; 'Retiring Date' = $RetiringDate; 'Orphaned' = $Orphaned; 'Usage' = $BackendState; 'Frontend Name' = $FrontEnd.Name; 'Frontend Target' = $FrontEnd.Fronttarget; 'Frontend Type' = $FrontEnd.FrontType; 'Frontend Subnet' = $FrontEnd.frontsub; 'Backend Count' = $BackEnds; 'Probe Count' = $Probes; 'Resource U' = $ResUCount; 'Tag Name' = [string]$Tag.Name; 'Tag Value' = [string]$Tag.Value } $obj if ($ResUCount -eq 1) { $ResUCount = 0 } } } } $tmp } } Else { if ($SmaResources) { $SheetName = 'Load Balancers' $TableName = ('LBTable_'+($SmaResources.'Resource U').count) $condtxt = @() #Retirement $condtxt += New-ConditionalText -Range F2:F100 -ConditionalType ContainsText $condtxt += New-ConditionalText Basic -Range E:E $condtxt += New-ConditionalText TRUE -Range H:H $condtxt += New-ConditionalText 'Not In Use' -Range I:I $Style = New-ExcelStyle -HorizontalAlignment Center -AutoSize -NumberFormat 0 $Exc = New-Object System.Collections.Generic.List[System.Object] $Exc.Add('Subscription') $Exc.Add('Resource Group') $Exc.Add('Name') $Exc.Add('Location') $Exc.Add('SKU') $Exc.Add('Retiring Feature') $Exc.Add('Retiring Date') $Exc.Add('Orphaned') $Exc.Add('Usage') $Exc.Add('Frontend Name') $Exc.Add('Frontend Target') $Exc.Add('Frontend Type') $Exc.Add('Frontend Subnet') $Exc.Add('Backend Count') $Exc.Add('Probe Count') if($InTag) { $Exc.Add('Tag Name') $Exc.Add('Tag Value') } $SmaResources | ForEach-Object { [PSCustomObject]$_ } | Select-Object $Exc | Export-Excel -Path $File -WorksheetName $SheetName -AutoSize -MaxAutoSizeRows 100 -TableName $TableName -TableStyle $tableStyle -ConditionalText $condtxt -Style $Style $excel = Open-ExcelPackage -Path $File $null = $excel.$SheetName.Cells["E1"].AddComment("No SLA is provided for Basic Load Balancer!", "Azure Resource Inventory") $excel.$SheetName.Cells["E1"].Hyperlink = 'https://docs.microsoft.com/en-us/azure/load-balancer/skus' $null = $excel.$SheetName.Cells["F1"].AddComment("It's important to be aware of upcoming Azure services and feature retirements to understand their impact on your workloads and plan migration.", "Azure Resource Inventory") $excel.$SheetName.Cells["F1"].Hyperlink = 'https://learn.microsoft.com/en-us/azure/advisor/advisor-how-to-plan-migration-workloads-service-retirement' $null = $excel.$SheetName.Cells["H1"].AddComment("Orphaned Load Balancer is when there is no Backend Pool at all associated with the Load Balancer and the Load Balancer may be deleted to save costs.", "Azure Resource Inventory") $excel.$SheetName.Cells["H1"].Hyperlink = 'https://learn.microsoft.com/en-us/azure/load-balancer/backend-pool-management' $null = $excel.$SheetName.Cells["I1"].AddComment("'Not In Use' Load Balancer is when there is a Backend Pool in the Load Balancer but no IP Address or Resources are associated with the Backend Pools and the Load Balancer should be investigated to be deleted to save costs.", "Azure Resource Inventory") $excel.$SheetName.Cells["I1"].Hyperlink = 'https://learn.microsoft.com/en-us/azure/load-balancer/backend-pool-management' Close-ExcelPackage $excel } } |