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