Toolkit/Public/Get-RscMssqlDatabase.ps1

#Requires -Version 3
function Get-RscMssqlDatabase {
    <#
    .SYNOPSIS
    Returns information about a MSSQL Database
 
    .DESCRIPTION
    Returns information about a MSSQL Database
 
    .LINK
    Schema reference:
    https://rubrikinc.github.io/rubrik-api-documentation/schema/reference
 
    .PARAMETER List
    Used to create a list of Databases
     
    .PARAMETER Name
    Used to return a specific Database based on the name
 
    .PARAMETER RscMssqlInstance
    SQL Server Instance Object returned from Get-RscMssqlInstance
 
 
    .PARAMETER RscMssqlAvailabilityGroup
    SQL Server Availability Group Objeft returned from Get-RscMssqlAvailabilityGroup
 
    .PARAMETER Detail
    Changes the data profile. This can affect the fields returned
 
    .EXAMPLE
    Return a list of MSSQL Databases
    Get-RscMssqlDatabase -List
 
    .EXAMPLE
    Return a list of MSSQL Databases named AdventureWorks2019
    Get-RscMssqlDatabase -Name AdventureWorks2019
 
    .EXAMPLE
    Return a list of MSSQL Databases named AdventureWorks2019 on the SQL 2019 Instance
    $RscMssqlInstance = Get-RscMssqlInstance -HostName sql19.demo.com -clusterID hja87-ajb43-v4avna-hnjag
    Get-RscMssqlDatabase -Name AdventureWorks2019 -RscMssqlInstance $RscMssqlInstance
    #>


    [CmdletBinding(
        # ___ Example ___
        DefaultParameterSetName = "List"
    )]
    Param(
        [Parameter(ParameterSetName = "List", Mandatory = $false)]
        [Switch]$List,

        [Parameter(ParameterSetName = "Name", Mandatory = $true)]
        [String]$Name,

        [Parameter(ParameterSetName = "Name", Mandatory = $false)]
        [Parameter(ParameterSetName = "Instance", Mandatory = $true)]
        [RubrikSecurityCloud.Types.MssqlInstance]$RscMssqlInstance, 

        [Parameter(ParameterSetName = "Name", Mandatory = $false)]
        [Parameter(ParameterSetName = "AvailabilityGroup", Mandatory = $true)]
        [RubrikSecurityCloud.Types.MssqlAvailabilityGroup]$RscMssqlAvailabilityGroup, 

        [Parameter(ParameterSetName = "Id", Mandatory = $true)]
        [String]$Id
    )
    
    Process {
        Write-Debug "- Running Get-RscMssqlDatabase"
        #region Create Query
        switch($PSCmdlet.ParameterSetName){
            "List"{
                $query = New-RscQueryMssql -Operation Databases -AddField Nodes.PhysicalPath
            }
            { ($_ -eq "Name") -or ($_ -eq "Instance") -or ($_ -eq "AvailabilityGroup")  } {
                $query = New-RscQueryMssql -Op Databases `
                -AddField Nodes.PhysicalPath, `
                    Nodes.PostBackupScript, `
                    Nodes.PreBackupScript, `
                    Nodes.CopyOnly, `
                    Nodes.HostLogRetention, `
                    Nodes.LogBackupFrequencyInSeconds, `
                    Nodes.LogBackupRetentionInHours    
                    $query.Var.filter = @()
            }
            "Id"{
                $query = New-RscQueryMssql -Operation Database 
                $query.Field.PhysicalPath = New-Object RubrikSecurityCloud.Types.PathNode
                $query.Field.PhysicalPath.SelectForRetrieval() 
                $query.Var.fid = $Id
            }
        }
        #endregion
        if ($Name){
            $nameFilter = New-Object -TypeName RubrikSecurityCloud.Types.Filter
            $nameFilter.Field = [RubrikSecurityCloud.Types.HierarchyFilterField]::NAME_EXACT_MATCH
            $nameFilter.texts = $Name
            $query.Var.filter += $nameFilter
        }

        $results = $query.Invoke()   
                
        switch($PSCmdlet.ParameterSetName){
            "List"{
                $results.Nodes
            }
            "Id"{
                $results
            }
            { ($_ -eq "Name") -or ($_ -eq "Instance") -or ($_ -eq "AvailabilityGroup")  } {
                if ($RscMssqlInstance) {
                    $results = ($results.Nodes | Where-Object {$_.PhysicalPath.Fid -eq $RscMssqlInstance.id})
                    $results
                }elseif ($RscMssqlAvailabilityGroup) {
                    $results = $results.Nodes | Where-Object {$_.PhysicalPath.Fid -eq $RscMssqlAvailabilityGroup.id}
                    $results                
                }else{
                    $results.nodes
                }
            }
        }
    } 
}