public/api/Get-MBSAPIBilling.ps1

function Get-MBSAPIBilling {
    <#
    .SYNOPSIS
    Get Billing information for current month
     
    .DESCRIPTION
    Calls GET/PUT request to api/Billing or api/Billing/Details
     
    .PARAMETER UserID
    Specify to filter output by backup user ID.
     
    .PARAMETER CompanyName
    Specify to filter output by backup Company name.
     
    .PARAMETER Date
    Billing date. Date format "yyyy-MM-dd". If empty or not specified, MBS will set current month.
     
    .PARAMETER ProfileName
    Profile name used with MSP360 PowerShell for MBS API (set via Set-MBSApiCredential)
     
    .EXAMPLE
    Get-MBSAPIBilling -ProfileName profile
 
    Get billing details for all users and current month.
    .EXAMPLE
    Get-MBSAPIBilling -UserID bf3206df-ad73-4cdc-96ad-d4e3afa66ebc -ProfileName profile -Date "2020-02-01"
 
    Get billing details for the specified user ID and date.
    .EXAMPLE
    Get-MBSAPIBilling -CompanyName "APITest" -ProfileName profile
 
    Get billing details for the specified company and current month.
     
    .INPUTS
    System.Management.Automation.PSCustomObject
    String
 
    .OUTPUTS
    System.Management.Automation.PSCustomObject
 
    .NOTES
        Author: Alex Volkov
    .LINK
 
    #>

    
    [CmdletBinding(DefaultParameterSetName='NoFilterOutput')]
    param (
        #
        [Parameter(Mandatory=$true, HelpMessage="UserID", ValueFromPipelineByPropertyName, ValueFromPipeline=$true, ParameterSetName='UserBillingDetails')]
        [string]$UserID,
        #
        [Parameter(Mandatory=$true, HelpMessage="Company Name", ValueFromPipelineByPropertyName, ValueFromPipeline=$true, ParameterSetName='CompanyBillingDetails')]
        [string]$CompanyName,
        #
        [Parameter(Mandatory=$false, HelpMessage="Date", ParameterSetName='UserBillingDetails')]
        [Parameter(Mandatory=$false, HelpMessage="Date", ParameterSetName='CompanyBillingDetails')]
        [string]$Date,
        #
        [Parameter(Mandatory=$false, HelpMessage="Common parameter", ParameterSetName='NoFilterOutput')]
        [switch]$NoFilterOutput=$true,
        #
        [string]
        $ProfileName
    )
    
    begin {
       
    }
    
    process {
        if ($UserID) {
            $UserPUT = @{
                UserID = $UserID
                Date = $Date
            }
            if (-not $Date){
                $UserPUT.Remove("Date")
            }
            Write-Verbose ($UserPUT|ConvertTo-Json)
            $Billing = Invoke-RestMethod -Uri ((Get-MBSApiUrl).Billing +'/Details') -Method PUT -Body ($UserPUT|ConvertTo-Json) -Headers (Get-MBSAPIHeader -ProfileName $ProfileName) -ContentType 'application/json'
        }elseif ($CompanyName) {
            $CompanyPUT = @{
                CompanyName = $CompanyName
                Date = $Date
            }
            if (-not $Date){
                $CompanyPUT.Remove("Date")
            }
            Write-Verbose ($CompanyPUT|ConvertTo-Json)
            $Billing = Invoke-RestMethod -Uri (Get-MBSApiUrl).Billing -Method PUT -Body ($CompanyPUT|ConvertTo-Json) -Headers (Get-MBSAPIHeader -ProfileName $ProfileName) -ContentType 'application/json'
        }elseif ($NoFilterOutput) {
            $Billing = Invoke-RestMethod -Uri (Get-MBSApiUrl).Billing -Method Get -Headers (Get-MBSAPIHeader -ProfileName $ProfileName)
        }else{
            Write-host "Incorrect parameters."
        }
        return $Billing
    }

    end {
        
    }
}