Toolkit/Public/Get-RscMssqlLogShipping.ps1

#Requires -Version 3
function Get-RscMssqlLogShipping {
    <#
    .SYNOPSIS
    Retrieves SQL Server log shipping relationships from Rubrik Security Cloud.

    .DESCRIPTION
    Returns log shipping relationships managed by Rubrik. You can list all
    relationships, look up a specific one by primary database and secondary
    database name, or filter by cluster. Pipe a database object to scope
    results to that database's log shipping targets.

    .LINK
    Schema reference:
    https://rubrikinc.github.io/rubrik-api-documentation/schema/reference

    .PARAMETER Id
    The RSC object ID.

    .PARAMETER List
    Return all items. This is the default behavior.

    .PARAMETER PrimaryDatabase
    A SQL Server database object, typically obtained from Get-RscMssqlDatabase.

    .PARAMETER SecondaryDatabaseName
    The name of the secondary (target) database in the log shipping relationship.

    .PARAMETER Cluster
    A Rubrik cluster object to filter by. Pipe from Get-RscCluster.

    .PARAMETER AsQuery
    Return the query object instead of running the query.
    Preliminary read-only queries may still run to gather IDs or
    other data needed to build the main query.

    .EXAMPLE
    # Get all log shipping relationships
    Get-RscMssqlLogShipping

    .EXAMPLE
    # Get log shipping on a specific cluster
    Get-RscCluster -Name "cluster-east" | Get-RscMssqlLogShipping

    .EXAMPLE
    # Get log shipping for a specific database
    Get-RscMssqlDatabase -Name "AdventureWorks" | Get-RscMssqlLogShipping
    #>


    [CmdletBinding(
        # ___ Example ___
        DefaultParameterSetName = "List"
    )]
    Param(
        [Parameter(
            ParameterSetName = "Id",
            Mandatory = $false
        )]
        [String]$Id,
        
        [Parameter(
            ParameterSetName = "List",
            Mandatory = $false
        )]
        [Switch]$List,
        
        [Parameter(
            ParameterSetName = "Query",
            Mandatory = $false,
            ValueFromPipeline = $true
        )]
        [Alias("RscMssqlDatabase")]
        [RubrikSecurityCloud.Types.MssqlDatabase]$PrimaryDatabase,

        [Parameter(
            ParameterSetName = "Query",
            Mandatory = $false
        )]
        [String]$SecondaryDatabaseName ,

        [Parameter(
            ParameterSetName = "Query",
            Mandatory = $false,
            ValueFromPipeline = $true
        )]
        [Alias("RscCluster")]
        [RubrikSecurityCloud.Types.Cluster]$Cluster,

        [Parameter(
            Mandatory = $false,
            ValueFromPipeline = $false,
            HelpMessage = "Return the query object instead of running the query"
        )][Switch]$AsQuery
    )
    
    Process {

        if($Id) {
            $query = New-RscQuery -Gql cdmMssqlLogShippingTarget
            $query.var.Fid = $Id

            $query.Field.fid = "FETCH"
            $query.Field.cdmId = "FETCH"
            $query.Field.location = "FETCH"
            $query.Field.LagTimeFromPrimary = 1
            $query.Field.LastAppliedPoint = "1900/01/01"
            $query.Field.State = "FETCH"
            $query.Field.Status = "FETCH"
            $query.Field.LogFrequency = 1
            $query.Field.PrimaryDatabase = New-Object -TypeName RubrikSecurityCloud.Types.MssqlDatabase
            $query.Field.PrimaryDatabase.Name = "FETCH"
            $query.Field.PrimaryDatabase.Id = "FETCH"
            $query.Field.SecondaryDatabase = New-Object -TypeName RubrikSecurityCloud.Types.MssqlDatabase
            $query.Field.SecondaryDatabase.Name = "FETCH"
            $query.Field.SecondaryDatabase.Id = "FETCH"
            $query.Field.SecondaryInstance = New-Object -TypeName RubrikSecurityCloud.Types.MssqlInstance
            $query.Field.SecondaryInstance.Name = "FETCH"
            $query.Field.SecondaryInstance.Id = "FETCH"
            $query.Field.Cluster = New-Object RubrikSecurityCloud.Types.Cluster
            $query.Field.Cluster.Name = "FETCH"
            $query.Field.Cluster.Id = "FETCH"
            $query.Field.PrimaryCluster = New-Object RubrikSecurityCloud.Types.Cluster
            $query.Field.PrimaryCluster.Name = "FETCH"
            $query.Field.PrimaryCluster.Id = "FETCH"

            if ( $AsQuery ) { return $query }
        }
        else {
            $query = New-RscQuery -Gql cdmMssqlLogShippingTargets
            $query.Var.filters = @()
    
            if ($Cluster){
                $clusterFilter = New-Object -TypeName RubrikSecurityCloud.Types.MssqlLogShippingTargetFilterInput
                $clusterFilter.Field = [RubrikSecurityCloud.Types.MssqlLogShippingTargetFilterField]::CLUSTER_ID
                $clusterFilter.texts = $Cluster.Id
                $query.Var.filters += $clusterFilter
            }
    
            if($SecondaryDatabaseName) {
                $secondaryNameFilter = New-Object -TypeName RubrikSecurityCloud.Types.MssqlLogShippingTargetFilterInput
                $secondaryNameFilter.Field = [RubrikSecurityCloud.Types.MssqlLogShippingTargetFilterField]::SECONDARY_NAME
                $secondaryNameFilter.texts = $SecondaryDatabaseName
                $query.Var.filters += $secondaryNameFilter
            }
    
            if($PrimaryDatabase) {
                $primaryDBIDFilter = New-Object -TypeName RubrikSecurityCloud.Types.MssqlLogShippingTargetFilterInput
                $primaryDBIDFilter.Field = [RubrikSecurityCloud.Types.MssqlLogShippingTargetFilterField]::PRIMARY_DB_ID
                $primaryDBIDFilter.texts = $PrimaryDatabase.CdmId
                $query.Var.filters += $primaryDBIDFilter
            }
    
            $query.Field.Nodes[0].fid = "FETCH"
            $query.Field.Nodes[0].cdmId = "FETCH"
            $query.Field.Nodes[0].location = "FETCH"
            $query.Field.Nodes[0].LagTimeFromPrimary = 1
            $query.Field.Nodes[0].LastAppliedPoint = "1900/01/01"
            $query.Field.Nodes[0].State = "FETCH"
            $query.Field.Nodes[0].Status = "FETCH"
            $query.Field.Nodes[0].LogFrequency = 1
            $query.Field.Nodes[0].PrimaryDatabase = New-Object -TypeName RubrikSecurityCloud.Types.MssqlDatabase
            $query.Field.Nodes[0].PrimaryDatabase.Name = "FETCH"
            $query.Field.Nodes[0].PrimaryDatabase.Id = "FETCH"
            $query.Field.Nodes[0].SecondaryDatabase = New-Object -TypeName RubrikSecurityCloud.Types.MssqlDatabase
            $query.Field.Nodes[0].SecondaryDatabase.Name = "FETCH"
            $query.Field.Nodes[0].SecondaryDatabase.Id = "FETCH"
            $query.Field.Nodes[0].SecondaryInstance = New-Object -TypeName RubrikSecurityCloud.Types.MssqlInstance
            $query.Field.Nodes[0].SecondaryInstance.Name = "FETCH"
            $query.Field.Nodes[0].SecondaryInstance.Id = "FETCH"
            $query.Field.Nodes[0].Cluster = New-Object RubrikSecurityCloud.Types.Cluster
            $query.Field.Nodes[0].Cluster.Name = "FETCH"
            $query.Field.Nodes[0].Cluster.Id = "FETCH"
            $query.Field.Nodes[0].PrimaryCluster = New-Object RubrikSecurityCloud.Types.Cluster
            $query.Field.Nodes[0].PrimaryCluster.Name = "FETCH"
            $query.Field.Nodes[0].PrimaryCluster.Id = "FETCH"
    
            if ( $AsQuery ) { return $query }
            $result = $query.Invoke()
            $result.Nodes
        }
    } 
}