Get-sqmDistributedAgHealth Always On

Creates a health report for Distributed AlwaysOn Availability Groups (is_distributed=1): primary/secondary AG names, replica sync state, database sync state, LSN lag, and failover readiness. Requires SQL Server 2016 SP1+. Outputs TXT and CSV reports.

Execution Flow

START dbatools available? throw ERROR foreach $instance in $SqlInstance [pipeline] Check ProductMajorVersion ≥ 13 (SQL 2016+) Invoke-DbaQuery: JOIN ag/ar/ars/adbrs WHERE is_distributed=1 PrimaryAgName, SecondaryAgName, DagSyncState (LSN compare) ReplicaName/Role/AvailabilityMode/SyncHealth/ConnectionState foreach $agGroup in (Group-Object PrimaryAgName) TXT: PRIMARY AG header, Secondary AG, DagSyncState Replicas table: SyncHealth OK/WARN icon Databases table: [DbSyncState] Write TXT + CSV reports Build result: DAGCount / ReplicaCount / Status / files Return $allInstanceResults[] DONE

Synopsis

Queries sys.availability_groups WHERE is_distributed = 1 joined with replica and database state DMVs. The DAG sync state is derived by comparing last_hardened_lsn with last_sent_lsn. Each primary AG's replicas and databases are written as a structured TXT report and a flat CSV for further analysis.

Requires dbatools and SQL Server 2016 SP1 or later (Distributed AGs are not supported on earlier versions). The SQL Server major version is verified before querying.

Syntax

Get-sqmDistributedAgHealth
    [-SqlInstance <String[]>]    # pipeline
    [-SqlCredential <PSCredential>]
    [-OutputPath <String>]
    [-ContinueOnError]
    [-EnableException]

Parameters

ParameterTypeDefaultDescription
-SqlInstanceString[]$env:COMPUTERNAMESQL Server instance(s) to query. Pipeline-capable.
-SqlCredentialPSCredentialCredential for the SQL connection.
-OutputPathStringC:\System\WinSrvLog\MSSQLDirectory for TXT and CSV report files.
-ContinueOnErrorSwitchfalseContinue with the next instance on error.
-EnableExceptionSwitchfalseThrow terminating exceptions.

Return Value

PropertyDescription
SqlInstanceThe queried SQL Server instance.
DistributedAgCountNumber of Distributed AGs found.
ReplicaCountUnique replica count across all DAGs.
DatabaseCountUnique database count across all DAGs.
StatusOK / Error.
TxtFile / CsvFileWritten report file paths.
DetailsRaw DMV result rows for further processing.

Examples

# Health report for local instance
Get-sqmDistributedAgHealth

# Multiple instances
Get-sqmDistributedAgHealth -SqlInstance "SQL01","SQL02" -OutputPath "D:\Reports"

# Pipeline
"SQL01" | Get-sqmDistributedAgHealth -ContinueOnError