Src/Private/Report/Get-AbrAzDdosProtectionPlan.ps1
|
function Get-AbrAzDdosProtectionPlan { <# .SYNOPSIS Used by As Built Report to retrieve Azure DDoS Protection Plan information .DESCRIPTION Documents the configuration of Azure DDoS Protection Plans including protected virtual networks and provisioning state. .NOTES Version: 0.1.0 Author: Tim Carman Twitter: @tpcarman Github: tpcarman .EXAMPLE .LINK #> [CmdletBinding()] param () begin { $LocalizedData = $reportTranslate.GetAbrAzDdosProtectionPlan Write-PScriboMessage ($LocalizedData.InfoLevel -f $InfoLevel.DdosProtectionPlan) } process { try { if ($InfoLevel.DdosProtectionPlan -ge 1) { $AzDdosPlans = Get-AzDdosProtectionPlan -ErrorAction SilentlyContinue | Sort-Object Name if ($AzDdosPlans) { Write-PScriboMessage $LocalizedData.Collecting Section -Style Heading4 $LocalizedData.Heading { if ($Options.ShowSectionInfo) { Paragraph $LocalizedData.SectionInfo BlankLine } $LockMap = @{} $AllLocks = Get-AzResourceLock -ErrorAction SilentlyContinue foreach ($Lock in $AllLocks) { $Key = $Lock.ResourceId.ToLower() if (-not $LockMap.ContainsKey($Key)) { $LockMap[$Key] = @() } $LockMap[$Key] += $Lock } $AzDdosPlanInfo = @() foreach ($AzDdosPlan in $AzDdosPlans) { $ProtectedVNetCount = if ($AzDdosPlan.VirtualNetworks) { $AzDdosPlan.VirtualNetworks.Count } else { 0 } $InObj = [Ordered]@{ $LocalizedData.Name = $AzDdosPlan.Name $LocalizedData.ResourceGroup = $AzDdosPlan.ResourceGroupName $LocalizedData.Location = $AzLocationLookup."$($AzDdosPlan.Location)" $LocalizedData.Subscription = "$($AzSubscriptionLookup.(($AzDdosPlan.Id).split('/')[2]))" $LocalizedData.SubscriptionID = ($AzDdosPlan.Id).split('/')[2] $LocalizedData.ProtectedVirtualNetworks = $ProtectedVNetCount $LocalizedData.ProvisioningState = $AzDdosPlan.ProvisioningState } $InObj[$LocalizedData.Locks] = $( $rl = $LockMap[$AzDdosPlan.Id.ToLower()] if ($rl) { ($rl | ForEach-Object { "$($_.Name) ($($_.Properties.Level))" }) -join [Environment]::NewLine } else { $LocalizedData.None } ) if ($Options.ShowTags) { $InObj[$LocalizedData.Tags] = if ($null -eq $AzDdosPlan.Tags -or $AzDdosPlan.Tags.Count -eq 0) { $LocalizedData.None } else { ($AzDdosPlan.Tags.Keys | ForEach-Object { "$_`:`t$($AzDdosPlan.Tags[$_])" }) -join [Environment]::NewLine } } $AzDdosPlanInfo += [PSCustomObject]$InObj } if ($Healthcheck.DdosProtectionPlan.ProvisioningState) { $AzDdosPlanInfo | Where-Object { $_.$($LocalizedData.ProvisioningState) -ne 'Succeeded' } | Set-Style -Style Critical -Property $LocalizedData.ProvisioningState } if ($InfoLevel.DdosProtectionPlan -ge 2) { Paragraph ($LocalizedData.ParagraphDetail -f $AzSubscription.Name) foreach ($AzDdosPlan in $AzDdosPlanInfo) { $PlanName = $AzDdosPlan.($LocalizedData.Name) $PlanRg = $AzDdosPlan.($LocalizedData.ResourceGroup) Section -Style NOTOCHeading5 -ExcludeFromTOC $PlanName { $TableParams = @{ Name = "$($LocalizedData.TableHeading) - $PlanName" List = $true ColumnWidths = 40, 60 } if ($Report.ShowTableCaptions) { $TableParams['Caption'] = "- $($TableParams.Name)" } $AzDdosPlan | Table @TableParams $FullPlan = $AzDdosPlans | Where-Object { $_.Name -eq $PlanName -and $_.ResourceGroupName -eq $PlanRg } if ($FullPlan -and $FullPlan.VirtualNetworks) { Section -Style NOTOCHeading6 -ExcludeFromTOC $LocalizedData.ProtectedVirtualNetworks { $VNetInfo = @() foreach ($VNet in $FullPlan.VirtualNetworks) { $VNetIdParts = $VNet.Id.split('/') $InObj = [Ordered]@{ $LocalizedData.VirtualNetworkName = $VNetIdParts[-1] $LocalizedData.ResourceGroup = $VNetIdParts[4] $LocalizedData.Subscription = "$($AzSubscriptionLookup.($VNetIdParts[2]))" } $VNetInfo += [PSCustomObject]$InObj } $TableParams = @{ Name = "$($LocalizedData.ProtectedVirtualNetworks) - $PlanName" List = $false ColumnWidths = 40, 35, 25 } if ($Report.ShowTableCaptions) { $TableParams['Caption'] = "- $($TableParams.Name)" } $VNetInfo | Table @TableParams } } } } } else { Paragraph ($LocalizedData.ParagraphSummary -f $AzSubscription.Name) BlankLine $TableParams = @{ Name = "$($LocalizedData.TableHeading) - $($AzSubscription.Name)" List = $false Columns = $LocalizedData.Name, $LocalizedData.ResourceGroup, $LocalizedData.Location, $LocalizedData.ProtectedVirtualNetworks, $LocalizedData.ProvisioningState ColumnWidths = 25, 20, 15, 20, 20 } if ($Report.ShowTableCaptions) { $TableParams['Caption'] = "- $($TableParams.Name)" } $AzDdosPlanInfo | Table @TableParams } } } } } catch { Write-PScriboMessage -IsWarning "$($LocalizedData.ErrorMessage) $($_.Exception.Message)" } } end {} } |