Use dbatools for AlwaysOn availability groups

Using dbatools to manage and troubleshoot AlwaysOn availability groups in SQL Server.

List the groups and the replica states

Set-DbatoolsInsecureConnection
Get-DbaAgReplica -SqlInstance localhost | ft Name, AvailabilityGroup, FailoverMode, Role, RollupSynchronizationState

Fail all availability groups over to a specific node

Set-DbatoolsInsecureConnection

Get-DbaAgReplica -SqlInstance localhost | where {$_.Role -eq "Secondary" -and $_.RollupSynchronizationState -eq "Synchronized"} | ft Name, AvailabilityGroup, FailoverMode, Role, RollupSynchronizationState

Get-DbaAgReplica -SqlInstance localhost
Get-DbaAgReplica -SqlInstance localhost | Switch-DbaAgReplica -TargetSqlInstance "SQLNODE2"

Get-DbaAgReplica -SqlInstance localhost | Move-DbaAgReplica -DestinationSqlInstance "SQLNODE2"

List the databases that are not synchronizing

Set-DbatoolsInsecureConnection
Get-DbaAgDatabaseReplicaState -SqlInstance localhost | where {$_.IsSuspended} | ft ReplicaServerName, AvailabilityGroup, DatabaseName, SuspendReason

Resume synchronization on the suspended databases

Set-DbatoolsInsecureConnection
Resume-DbaAgDbDataMovement -SqlInstance sql2 -AvailabilityGroup test

Get-DbaAgDatabase -SqlInstance sql2 | Resume-DbaAgDbDataMovement -Confirm:$false

Fail over every availability group

Set-DbatoolsInsecureConnection

$secondary = Get-DbaAgReplica -SqlInstance localhost | where {$_.Role -eq "Secondary" -and $_.RollupSynchronizationState -eq "Synchronized"} | select Name -First 1

Get-DbaAvailabilityGroup -SqlInstance $secondary.Name | Invoke-DbaAgFailover -Confirm:$false