Functions/Get-Subscription.ps1

function Get-Subscription {
    try{
        $allSubscriptions = Get-AzureRmSubscription -TenantId $currentTenantId;

        if($subscriptions){
            $totalSubscriptionsFound = $subscriptions.Count;
            
        } else {
            $totalSubscriptionsFound = $allSubscriptions.Count;
        }

        Add-Log "No of subscriptions to process for tenant $currentTenantId : $totalSubscriptionsFound" "subscriptions";
        $totalSubscriptionsProcessed = 0;

        foreach($subscription in $allSubscriptions){
            if(!$subscriptions -or $subscriptions.contains($subscription.Id) -or $subscriptions.contains($subscription.Name)){
                Set-AzureRmContext -Subscription $subscription.Id | Out-Null
                $subscriptionId = $subscription.Id;
                $subscriptionName = $subscription.Name;
                Write-Progress -Activity "Scanning Subscriptions" -Id 4 -CurrentOperation "Processing subscription: $subscriptionName" -Status "Subscriptions in current tenant: $totalSubscriptionsProcessed of $totalSubscriptionsFound" -PercentComplete (($totalSubscriptionsProcessed/$totalSubscriptionsFound)*100)
            
                $resourceGroups = Get-AzureRmResourceGroup;

                $totalResourceGroupsFound = $resourceGroups.Count;
                Add-Log "No of resource groups found in subscription $subscriptionName ($subscriptionId): $totalResourceGroupsFound" "resourcegroups";

                $totalResourceGroupsProcessed = 0;

                foreach($resourceGroup in $resourceGroups){
                    $resourceGroupName = $resourceGroup.ResourceGroupName;
                    Write-Progress -Activity "Scanning Resource Groups" -Id 5 -CurrentOperation "Processing resource group: $resourceGroupName" -Status "Resource groups in current subscription: $totalResourceGroupsProcessed of $totalResourceGroupsFound" -PercentComplete (($totalResourceGroupsProcessed/$totalResourceGroupsFound)*100)

                    if(!$sections -or $sections.Contains("as")){
                        Get-AppService;
                        Add-Log "Processed App service certificates in resource group $resourceGroupName" "resourcegroups";
                    }
                    if(!$sections -or $sections.Contains("kv")){
                        Get-KeyVault;
                        Add-Log "Processed Key vaults (keys, secrets and certificates) in resource group $resourceGroupName" "resourcegroups";
                    }
                    if(!$sections -or  $sections.Contains("ad")){
                        Join-AppSettingActiveDirectory;
                        Add-Log "Cross referenced web apps against AD applications in resource group $resourceGroupName" "resourcegroups";
                    }
                    $totalResourceGroupsProcessed++;
                    Add-Log "processed resource group in subscription $subscriptionName ($subscriptionId): $resourceGroupName" "resourcegroups";
                }

                Add-Log "No of resource groups processed in subscription $subscriptionName ($subscriptionId): $totalResourceGroupsProcessed" "resourcegroups";
                $totalSubscriptionsProcessed++;
                Add-Log "processed subscription in tenant $currentTenantId : $subscriptionName ($subscriptionId)" "subscriptions";
            }
        }
        Add-Log "No of subscriptions processed in tenant $currentTenantId : $totalSubscriptionsProcessed" "subscriptions";
    } catch {
        Out-Error $Error[0];
    }
    
}