Toolkit/Public/Get-RscMssqlAvailabilityGroup.ps1
#Requires -Version 3 function Get-RscMssqlAvailabilityGroup { <# .SYNOPSIS Retrieve info about MSSQL Availability Groups .DESCRIPTION Retrieve info about MSSQL Availability Groups. An Availability Group is a Parent Object to a database. If your database is in an AG, then you will want to use this cmdlet, but if not you will want to get the Instance information using Get-RscMssqlInstance. .LINK Schema reference: https://rubrikinc.github.io/rubrik-api-documentation/schema/reference .PARAMETER Id Used to return a specific Availability Groups based on the Id assigned inside of Rubrik .PARAMETER Name Used to return a specific Availability Groups based on the name of the Availability Group .PARAMETER Cluster Cluster object retrieved via Get-RscCluster .PARAMETER Sla SLA object retrieved via Get-RscCluster .PARAMETER Relic Switch to include or exclude relics .PARAMETER Replica Switch to include or exclude replicated AGs .EXAMPLE Returns a list of Availability Groups in Rubrik, including relics and replicas. Get-RscMssqlAvailabilityGroup .EXAMPLE Returns information about a specific Availability Group based on the Rubrik ID Get-RscMssqlAvailabilityGroup -Id "86da734b-2fee-4fdc-bdc8-a73ab5648f" .EXAMPLE Returns information about a specific Availability Group based on the name of the AG. Get-RscMssqlAvailabilityGroup -Name AG_Accounting -Relic:$false -Replica:$false .EXAMPLE Returns a list of Availability Groups that are connected to a specific Rubrik Cluster Get-RscCluster -Name "example" | Get-RscMssqlAvailabilityGroup -Relic:$false -Replica:$false .EXAMPLE Returns information about a specific Availability Group based on the name of the AG and the name of the Rubrik Cluster Get-RscCluster -Name "example" | Get-RscMssqlAvailabilityGroup -Name AG_Accounting -Relic:$false -Replica:$false #> [CmdletBinding( DefaultParameterSetName = "List" )] Param( # DEPRECATED. Providing -List is superfluous. Running Get-RscMssqlAvailabilityGroup with no arguments will return a list. This argument will be ignored. [Parameter(ParameterSetName = "List", Mandatory = $false)] [Switch]$List, # Rubrik id of the availability group [Parameter(ParameterSetName = "Id",Mandatory = $true)] [String]$Id, # Name of the availability group [Parameter( ParameterSetName = "Name", Mandatory = $false, Position = 0 )] [Alias("AvailabilityGroupName")] # standardizing on -Name across cmdlets. Leaving alias for backward compatibility. [String]$Name, # Sla Domain object [Parameter( Mandatory = $false, ValueFromPipeline = $true, ParameterSetName = "Name" )] [RubrikSecurityCloud.Types.GlobalSlaReply]$Sla, # Rubrik cluster [Parameter( Mandatory = $false, ValueFromPipeline = $true, ParameterSetName = "Name" )] [Alias("RscCluster")] # standardizing on -Cluster across cmdlets. Leaving alias for backward compatibility. [RubrikSecurityCloud.Types.Cluster]$Cluster, # DEPRECATED. -Detail was intended to provide a more detailed view of the objects, however the definitions of "detail" resulted in the potential to pull inaccessible fields. # Detail is now the default, and the field definition is managed in the cmdlet code. [Parameter( Mandatory = $false, ValueFromPipeline = $false )][Switch]$Detail, # Include Relics [Parameter( Mandatory = $false )] [switch]$Relic, # Include Replicas [Parameter( Mandatory = $false )] [switch]$Replica, # Return .NET query object for troubleshooting [Parameter( Mandatory = $false )] [switch]$AsQuery ) Process { Write-Debug "- Running Get-RscMssqlAvailabilityGroup" $agFieldDef = Get-RscType -Name MssqlAvailabilityGroup -InitialProperties ` name,` id,` cluster.name, cluster.id,` primaryClusterLocation.name, primaryClusterLocation.clusterUuid # This is required because Get-RscType sets it as a ClusterSla, not a globalSlaReply $agFieldDef.effectiveSlaDomain = Get-RscType -Name GlobalSlaReply -InitialProperties name,Id if ($Id) { $query = New-RscQuery -GqlQuery mssqlAvailabilityGroup $query.Var.filter = @() $query.Var.fid = $id $query.Field = $agFieldDef if ($PSBoundParameters.ContainsKey("AsQuery")) { $query } else { $query.invoke() } } else { $query = New-RscQuery -GqlQuery mssqlTopLevelDescendants $query.var.typeFilter = [RubrikSecurityCloud.Types.HierarchyObjectTypeEnum]::MSSQL_AVAILABILITY_GROUP $query.Var.filter = @() $query.Field.Nodes = $agFieldDef if ($Name) { $nameFilter = New-Object -TypeName RubrikSecurityCloud.Types.Filter # Regex filter doesn't work in the API right now, but we're going to play pretend. # With real Regex, users could search for VMs that start with the letter A if they wanted. if ($name.Contains("*")) { $name.Replace("*",'') $nameFilter.Field = [RubrikSecurityCloud.Types.HierarchyFilterField]::REGEX $nameFilter.texts = $Name.Replace("*",'') } else { $nameFilter.Field = [RubrikSecurityCloud.Types.HierarchyFilterField]::NAME_EXACT_MATCH $nameFilter.texts = $Name } $query.var.filter += $nameFilter } if ($Sla) { $slaFilter = New-Object -TypeName RubrikSecurityCloud.Types.Filter $slaFilter.Field = [RubrikSecurityCloud.Types.HierarchyFilterField]::EFFECTIVE_SLA $slaFilter.Texts = $Sla.id $query.var.filter += $slaFilter } if($Cluster) { $clusterFilter = New-Object -TypeName RubrikSecurityCloud.Types.Filter $clusterFilter.Field = [RubrikSecurityCloud.Types.HierarchyFilterField]::CLUSTER_ID $clusterFilter.texts = $Cluster.Id $query.Var.filter += $clusterFilter } if ($PSBoundParameters.ContainsKey('relic')) { $relicFilter = New-Object -TypeName RubrikSecurityCloud.Types.Filter $relicFilter.Field = [RubrikSecurityCloud.Types.HierarchyFilterField]::IS_RELIC $relicFilter.Texts = $Relic $query.var.filter += $relicFilter } if ($PSBoundParameters.ContainsKey('replica')) { $replicaFilter = New-Object -TypeName RubrikSecurityCloud.Types.Filter $replicaFilter.Field = [RubrikSecurityCloud.Types.HierarchyFilterField]::IS_REPLICATED $replicaFilter.Texts = $Replica $query.var.filter += $replicaFilter } if ($PSBoundParameters.ContainsKey("AsQuery")) { $query } else { $query.invoke().nodes } } } } |