custom/oldsdk/Get-CVSQLDatabaseBackupHistory.ps1

Add-AEnums
function Get-CVSQLDatabaseBackupHistory { 
    <#
    .SYNOPSIS
        Method to retrieve SQL database backup history information.
    .DESCRIPTION
        Method to retrieve SQL database backup history information.
         
    .PARAMETER Name
        The database Name.
    .PARAMETER DatabaseObject
        The SQL DatabaseObject.
    .PARAMETER JobDetail
        Include full job details.
    .EXAMPLE
        Get-CVSQLDatabaseBackupHistory
    .EXAMPLE
        Get-CVSQLDatabaseBackupHistory -Name AuditDB
    .EXAMPLE
        Get-CVSQLDatabaseBackupHistory -Name AuditDB -JobDetail
    .EXAMPLE
        Get-CVSQLDatabaseBackupHistory -Name AuditDB -JobDetail | Select-Object -ExpandProperty JobDetail
    .OUTPUTS
        Outputs [PSCustomObject] containing backup history information.
    .NOTES
        Author: Gary Stoops
        Company: Commvault
    #>

        [CmdletBinding(DefaultParameterSetName = 'ByName')]
        [OutputType([PSCustomObject])]
        param(
            [Parameter(Mandatory = $True, ParameterSetName = 'ByName')]
            [ValidateNotNullorEmpty()]
            [String] $Name,
    
            [Parameter(Mandatory = $True, ParameterSetName = 'ByObject', ValueFromPipeline = $True, ValueFromPipelineByPropertyName = $True)]
            [ValidateNotNullorEmpty()]
            [System.Object] $DatabaseObject,
    
            [Switch] $JobDetail
        )
    
        begin { Write-Debug -Message "$($MyInvocation.MyCommand): begin"
    
            try {
                $sessionObj = Get-CVSessionDetail $MyInvocation.MyCommand.Name
                $endpointSave = $sessionObj.requestProps.endpoint
            }
            catch {
                throw $_
            }
        }
    
        process { Write-Debug -Message "$($MyInvocation.MyCommand): process"
    
            try {
                $sessionObj.requestProps.endpoint = $endpointSave
    
                if ($PSCmdlet.ParameterSetName -eq 'ByName') {
                    $databaseObj = Get-CVSQLDatabase -Name $Name
                    if ($null -ne $databaseObj) { 
                        $DatabaseObject = $databaseObj
                    }
                    else {
                        Write-Information -InformationAction Continue -MessageData "INFO: $($MyInvocation.MyCommand): database not found having name [$Name]"      
                        return
                    }
                }
    
                $sessionObj.requestProps.endpoint = $sessionObj.requestProps.endpoint -creplace ('{instanceId}', $DatabaseObject.insId)
                $sessionObj.requestProps.endpoint = $sessionObj.requestProps.endpoint -creplace ('{databaseId}', $DatabaseObject.dbId)
    
                $headerObj = Get-CVRESTHeader $sessionObj
                $body = ''
                $payload = @{}
                $payload.Add('headerObject', $headerObj)
                $payload.Add('body', $body)
                $validate = 'dbBackups'
    
                $response = Submit-CVRESTRequest $payload $validate
    
                if ($response.IsValid) {
                    foreach ($backup in $response.Content.dbBackups) {
                        $backupTime = $backup |`
                        Select-Object  @{Name='BackupTime';Expression={[timezone]::CurrentTimeZone.ToLocalTime(([datetime]'1/1/1970').AddSeconds($_.bkpDate))}}|`
                        Select-Object -ExpandProperty BackupTime
                        [PSCustomObject] $custom = New-Object PSObject
                        $custom | Add-Member -NotePropertyName 'Client' -NotePropertyValue $DatabaseObject.cName
                        $custom | Add-Member -NotePropertyName 'Instance' -NotePropertyValue $DatabaseObject.insName
                        $custom | Add-Member -NotePropertyName 'Database' -NotePropertyValue $DatabaseObject.dbName
                        $custom | Add-Member -NotePropertyName 'JobId' -NotePropertyValue $backup.jobId
    
                        if ($JobDetail) {
                            $sessionObj = Get-CVSessionDetail 'GetSQLDatabaseJobDetail'
                            $sessionObj.requestProps.endpoint = $sessionObj.requestProps.endpoint -creplace ('{instanceId}', $backup.insId)
                            $sessionObj.requestProps.endpoint = $sessionObj.requestProps.endpoint -creplace ('{databaseId}', $backup.dbId)
                            $sessionObj.requestProps.endpoint = $sessionObj.requestProps.endpoint -creplace ('{jobId}', $backup.jobId)
    
                            $headerObj = Get-CVRESTHeader $sessionObj
                            $body = ''
                            $payload = @{}
                            $payload.Add('headerObject', $headerObj)
                            $payload.Add('body', $body)
                
                            $response2 = Submit-CVRESTRequest $payload $validate
    
                            if ($response2.IsValid) {
                                $custom | Add-Member -NotePropertyName 'JobDetail' -NotePropertyValue $response2.Content.dbBackups
                            }
                            else {
                                $custom | Add-Member -NotePropertyName 'JobDetail' -NotePropertyValue $null
                                Write-Information -InformationAction Continue -MessageData "INFO: $($MyInvocation.MyCommand): job details for database [$Name] are not available"      
                            }
                        }
                        else {
                            $custom | Add-Member -NotePropertyName 'JobDetail' -NotePropertyValue $null
                        }
    
                        $custom | Add-Member -NotePropertyName 'BackupSize' -NotePropertyValue $backup.bkpSize
                        $custom | Add-Member -NotePropertyName 'BackupTime' -NotePropertyValue $backupTime
    
                        Write-Output $custom
                    }
                }
                else {
                    Write-Information -InformationAction Continue -MessageData "INFO: $($MyInvocation.MyCommand): backup history for database [$Name] is not available"      
                }
            }
            catch
            {
                throw $_
            }
        }
    
        end { Write-Debug -Message "$($MyInvocation.MyCommand): end"
        }
    }