Src/Public/Invoke-AsBuiltReport.Microsoft.Azure.ps1

function Invoke-AsBuiltReport.Microsoft.Azure {
    <#
    .SYNOPSIS
        PowerShell script to document the configuration of Microsoft Azure in Word/HTML/Text formats
    .DESCRIPTION
        Documents the configuration of Microsoft Azure in Word/HTML/Text formats using PScribo.
    .NOTES
        Version: 0.1.2
        Author: Tim Carman
        Twitter: @tpcarman
        Github: @tpcarman
        Credits: Iain Brighton (@iainbrighton) - PScribo module
 
    .LINK
        https://github.com/AsBuiltReport/AsBuiltReport.Microsoft.Azure
    #>


    # Do not remove or add to these parameters
    param (
        [String[]] $Target,
        [PSCredential] $Credential,
        [Switch] $MFA
    )

    # Import Report Configuration
    $Report = $ReportConfig.Report
    $Filter = $ReportConfig.Filter
    $InfoLevel = $ReportConfig.InfoLevel
    $Options = $ReportConfig.Options

    # Used to set values to TitleCase where required
    $TextInfo = (Get-Culture).TextInfo

    #region foreach loop
    foreach ($TenantId in $Target) {
        Try {
            Write-PScriboMessage "Connecting to Azure Tenant ID '$TenantId'."
            if ($MFA) {
                $AzAccount = Connect-AzAccount -TenantId $TenantId -ErrorAction Stop
            } else {
                $AzAccount = Connect-AzAccount -Credential $Credential -TenantId $TenantId -ErrorAction Stop
            }
        } Catch {
            Write-Error $_
        }

        if ($AzAccount) {
            $AzTenant = Get-AzTenant -TenantId $TenantId
            $AzLocations = Get-AzLocation
            $AzLocationLookup = @{ }
            foreach ($AzLocation in $AzLocations) {
                $AzLocationLookup.($AzLocation.Location) = $AzLocation.DisplayName
            }
            if ($AzTenant) {
                if ($Filter.Subscription -eq "*") {
                    $AzSubscriptions = Get-AzSubscription -TenantId $TenantId | Sort-Object Name
                } else {
                    $AzSubscriptions = foreach ($AzSubscription in $Filter.Subscription) {
                        Get-AzSubscription -TenantId $TenantId -SubscriptionId $AzSubscription
                    }
                }
                $AzSubscriptionLookup = @{ }
                foreach ($AzSubscription in ($AzSubscriptions | Sort-Object Name)) {
                    $AzSubscriptionLookup.($AzSubscription.SubscriptionId) = $AzSubscription.Name
                }
                Section -Style Heading1 $($AzTenant.Name) {
                    Get-AbrAzTenant
                    Section -Style Heading2 'Subscriptions' {
                        Get-AbrAzSubscription
                        foreach ($AzSubscription in ($AzSubscriptions | Sort-Object Name)) {
                            Section -Style Heading3 $($AzSubscription.Name) {
                                Write-PScriboMessage "Setting Azure context to Subscription ID '$AzSubscription.Id'."
                                $AzContext = Set-AzContext -Subscription $AzSubscription.Id -Tenant $TenantId
                                Get-AbrAzPolicyAssignment
                                Get-AbrAzAvailabilitySet
                                Get-AbrAzBastion
                                Get-AbrAzExpressRouteCircuit
                                Get-AbrAzFirewall
                                Get-AbrAzIpGroup
                                Get-AbrAzKeyVault
                                Get-AbrAzLoadBalancer
                                Get-AbrAzVirtualNetwork
                                Get-AbrAzNetworkSecurityGroup
                                Get-AbrAzVirtualMachine
                                Get-AbrAzRecoveryServicesVault
                                Get-AbrAsrProtectedItems
                            }
                        }
                    }
                }
            } else {
                Write-PScriboMessage "Azure Tenant $TenantId not found."
            }
            Disconnect-AzAccount $AzAccount
        }
    }
    #endregion foreach loop
}