custom/oldsdk/Mount-CVSQLDatabase.ps1

Add-AEnums
function Mount-CVSQLDatabase { 
    <#
    .SYNOPSIS
        Method to submit SQL database mount job.
    .DESCRIPTION
        Method to submit SQL database mount job.
         
    .PARAMETER Name
        Mount the SQL database identified by Name.
    .PARAMETER DatabaseObject
        Mount the SQL database identified by DatabaseObject.
    .PARAMETER DestDatabaseName
        Mount the SQL database with DestDatabaseName.
    .PARAMETER ExpireDays
        Mount the SQL database with ExpireDays. Default: 30
    .PARAMETER OverwriteDatabase
        Switch to control OverwriteDatabase.
    .PARAMETER Force
        Switch to Force override of default 'WhatIf' confirmation behavior.
    .EXAMPLE
        Mount-CVSQLDatabase
    .EXAMPLE
        Mount-CVSQLDatabase -Name AuditDB -OverwriteDatabase
    .EXAMPLE
        Mount-CVSQLDatabase -Name AuditDB -OverwriteDatabase -ExpiryDays 120
    .EXAMPLE
        Get-CVSQLDatabase | Mount-CVSQLDatabase -OverwriteDatabase -ExpiryDays 120
    .OUTPUTS
        Outputs [PSCustomObject] containing job submission result.
    .NOTES
        Author: Gary Stoops
        Company: Commvault
    #>

        [CmdletBinding(DefaultParameterSetName = 'ByName', SupportsShouldProcess = $True, ConfirmImpact = 'Medium')]
        [OutputType([String])]
        param(
            [Parameter(Mandatory = $True, ParameterSetName = 'ByName')]
            [ValidateNotNullorEmpty()]
            [String] $Name,
    
            [Parameter(Mandatory = $True, ParameterSetName = 'ByObject', ValueFromPipeline = $True, ValueFromPipelineByPropertyName = $True)]
            [ValidateNotNullorEmpty()]
            [System.Object] $DatabaseObject,
    
            [Parameter(Mandatory = $False)]
            [ValidateNotNullorEmpty()]
            [String] $DestDatabaseName,
    
            [Parameter(Mandatory = $False)]
            [ValidateNotNullorEmpty()]
            [Int32] $ExpireDays=30,
    
            [Switch] $OverwriteDatabase,
            [Switch] $Force
        )
    
        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)
    
                $body = @{}
                $body.Add('overwriteDatabase', $OverwriteDatabase.IsPresent)
                $body.Add('destinationDatabaseName', $DestDatabaseName)
                $body.Add('expireDays', $ExpireDays)
                $body = ($body | ConvertTo-Json -Depth 10)
    
                $payload = @{}
                $headerObj = Get-CVRESTHeader $sessionObj
                $payload.Add('headerObject', $headerObj)
                $payload.Add('body', $body)
                $validate = 'taskId'
    
                if ($Force -or $PSCmdlet.ShouldProcess($DatabaseObject.dbName)) {
                    $response = Submit-CVRESTRequest $payload $validate
                }
                else {
                    $response = Submit-CVRESTRequest $payload $validate -DryRun
                }
    
                if ($response.IsValid) {
                    Write-Output $response.Content
                }
                else {
                    Write-Information -InformationAction Continue -MessageData "INFO: $($MyInvocation.MyCommand): mount request declined for database [$($DatabaseObject.dbName)]"      
                }
            }
            catch
            {
                throw $_
            }
        }
    
        end { Write-Debug -Message "$($MyInvocation.MyCommand): end"
        }
    }