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.7 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 ) Get-RequiredModule -Name 'Az' -Version '12.0.0' Write-PScriboMessage -Plugin "Module" -Message "Please refer to the AsBuiltReport.Microsoft.Azure GitHub website for more detailed information about this project." Write-PScriboMessage -Plugin "Module" -Message "Do not forget to update your report configuration file after each new version release: https://www.asbuiltreport.com/user-guide/new-asbuiltreportconfig/" Write-PScriboMessage -Plugin "Module" -Message "Documentation: https://github.com/AsBuiltReport/AsBuiltReport.Microsoft.Azure" Write-PScriboMessage -Plugin "Module" -Message "Issues or bug reporting: https://github.com/AsBuiltReport/AsBuiltReport.Microsoft.Azure/issues" # Check the current AsBuiltReport.Microsoft.Azure module $InstalledVersion = Get-Module -ListAvailable -Name AsBuiltReport.Microsoft.Azure -ErrorAction SilentlyContinue | Sort-Object -Property Version -Descending | Select-Object -First 1 -ExpandProperty Version if ($InstalledVersion) { Write-PScriboMessage -Plugin "Module" -Message "AsBuiltReport.Microsoft.Azure $($InstalledVersion.ToString()) is currently installed." $LatestVersion = Find-Module -Name AsBuiltReport.Microsoft.Azure -Repository PSGallery -ErrorAction SilentlyContinue | Select-Object -ExpandProperty Version if ([Version]$LatestVersion -gt [Version]$InstalledVersion) { Write-PScriboMessage -Plugin "Module" -Message "AsBuiltReport.Microsoft.Azure $($LatestVersion.ToString()) is available." Write-PScriboMessage -Plugin "Module" -Message "Run 'Update-Module -Name AsBuiltReport.Microsoft.Azure -Force' to install the latest version." } } # 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) { # Create a Lookup Hashtable for all Azure Subscriptions $AzSubscriptions = Get-AzSubscription -TenantId $TenantId | Sort-Object Name $AzSubscriptionLookup = @{} foreach ($AzSubscription in $AzSubscriptions) { $AzSubscriptionLookup.($AzSubscription.SubscriptionId) = $AzSubscription.Name } # Filter Subscriptions if ($Filter.Subscription -ne "*") { $AzSubscriptions = foreach ($AzSubscription in $Filter.Subscription) { Get-AzSubscription -TenantId $TenantId -SubscriptionId $AzSubscription | Sort-Object Name } } Section -Style Heading1 $($AzTenant.Name) { Get-AbrAzTenant Section -Style Heading2 'Subscriptions' { Get-AbrAzSubscription foreach ($AzSubscription in $AzSubscriptions) { Section -Style Heading3 $($AzSubscription.Name) { Write-PScriboMessage "Setting Azure context to Subscription ID '$AzSubscription.Id'." $AzContext = Set-AzContext -Subscription $AzSubscription.Id -Tenant $TenantId Get-AbrAzAvailabilitySet Get-AbrAzBastion Get-AbrAzDnsPrivateResolver Get-AbrAzExpressRouteCircuit Get-AbrAzFirewall Get-AbrAzIpGroup Get-AbrAzKeyVault Get-AbrAzLoadBalancer Get-AbrAzVirtualNetwork Get-AbrAzNetworkSecurityGroup Get-AbrAzPolicy Get-AbrAzRouteTable Get-AbrAzVirtualMachine Get-AbrAzRecoveryServicesVault Get-AbrAsrProtectedItems Get-AbrAzStorageAccount } } } } } else { Write-PScriboMessage "Azure Tenant $TenantId not found." } Disconnect-AzAccount $AzAccount | Out-null } } #endregion foreach loop } |