functions/Get-AzSMCostReport.ps1

function global:Get-AzSMCostReport {

    <#
        .SYNOPSIS
        Create cost reports for next 31 days in a storage account in a subscription.
        .DESCRIPTION
        Create cost reports for next 31 days in a storage account in a subscription.
        .PARAMETER SubscriptionID
        Azure subscription ID in the format, 00000000-0000-0000-0000-000000000000
        .OUTPUTS
         
        .EXAMPLE
        Get-AzSMCostReport -Subscription 00000000-0000-0000-0000-000000000000 -StorageAccountResourceGroupName <> `
        -StorageAccountName <> -ConfirmRPInstall $true
        Create cost reports in a storage account in a subscription.
        .NOTES
        * CANNOT pipe to Remove- command. Output is text based only.
        .LINK
    #>

  
    [CmdletBinding(
        DefaultParameterSetName='SubscriptionID',
        ConfirmImpact='low'
    )]

    param(
        [Parameter(Mandatory=$true)][string] $SubscriptionID,
        [Parameter(Mandatory=$true)][string] $StorageAccountResourceGroupName,
        [Parameter(Mandatory=$true)][string] $StorageAccountName,
        [Parameter(Mandatory=$false)][boolean] $ConfirmRPInstall = $false
      )
    
    $null = Set-AzContext -SubscriptionId $SubscriptionID
     Write-Debug ('Subscription: {0}' -f $SubscriptionID)

    if ((Get-AzResourceProvider -ProviderNamespace "Microsoft.CostManagementExports").RegistrationState -ne "Registered") {
        if ($ConfirmRPInstall){
            Register-AzResourceProvider -ProviderNamespace "Microsoft.CostManagementExports"
        } else {
            Register-AzResourceProvider -ProviderNamespace "Microsoft.CostManagementExports" -Confirm
            Write-Host "If running this automated, you will need to add -ConfirmRPInstall $true parameter to confirm registration of Resource Provider in the subscription."
        }
        
        Write-Host "Registering CostManagementExports Resource Provider..."
        do {
            Start-Sleep -s 5
        } until ((Get-AzResourceProvider -ProviderNamespace "Microsoft.CostManagementExports").RegistrationState -eq "Registered")
    } else {
        Write-Host "CostManagementExports provider already registered."
    }

    #$StartDate = (Get-Date).AddHours(1).ToString("yyyyMMddTHH:mm:ssZ")
    #$EndDate = (Get-Date).AddDays(31).ToString("yyyyMMddTHH:mm:ssZ")
    $StartDate = (Get-Date).AddHours(1)
    $EndDate = (Get-Date).AddDays(31)

    #Verify if a report export is already created for AzureSaveMoney exports
    
    try {
        #Try to get the AzureSaveMoney report, if no exists error, no way to silence error
        $rpt = Get-AzCostManagementExport -Name "AzSM-CostManagementExport" -Scope "subscriptions/$SubscriptionID"
        if ($rpt.Name.Length -gt 1) {
            Write-Host "Report already exists at: https://portal.azure.com/#blade/Microsoft_Azure_CostManagement/Menu/overview"
        } else {
            Write-Host "Creating report export, AzSM-CostManagementExport @ $StorageAccountName"
            New-AzCostManagementExport -Scope "subscriptions/$SubscriptionID" -Name "AzSM-CostManagementExport" -ScheduleStatus "Active" -ScheduleRecurrence "Daily" -RecurrencePeriodFrom $StartDate -RecurrencePeriodTo $EndDate -Format "Csv" -DestinationResourceId "/subscriptions/$SubscriptionID/resourceGroups/$StorageAccountResourceGroupName/providers/Microsoft.Storage/storageAccounts/$StorageAccountName" -DestinationContainer "azsmcostexports" -DestinationRootFolderPath "Reports" -DefinitionType "Usage" -DefinitionTimeframe "MonthToDate" -DatasetGranularity "Daily"
        }
        
    }
    catch {
        #Create a report export if none exist
        Write-Host "Creating report export, AzSM-CostManagementExport @ $StorageAccountName"
        New-AzCostManagementExport -Scope "subscriptions/$SubscriptionID" -Name "AzSM-CostManagementExport" -ScheduleStatus "Active" -ScheduleRecurrence "Daily" -RecurrencePeriodFrom $StartDate -RecurrencePeriodTo $EndDate -Format "Csv" -DestinationResourceId "/subscriptions/$SubscriptionID/resourceGroups/$StorageAccountResourceGroupName/providers/Microsoft.Storage/storageAccounts/$StorageAccountName" -DestinationContainer "azsmcostexports" -DestinationRootFolderPath "Reports" -DefinitionType "Usage" -DefinitionTimeframe "MonthToDate" -DatasetGranularity "Daily"
    }

    #Run a report export
    Invoke-AzCostManagementExecuteExport -ExportName "AzSM-CostManagementExport" -Scope "subscriptions/$SubscriptionID"
    
    #Find the latest report export
    

    
}