---
title: "Overview of PowerShell Cmdlets for Always On Availability Groups (SQL Server) | Microsoft Docs"
ms.custom: ""
ms.date: "08/30/2017"
ms.prod: "sql-server-2016"
ms.reviewer: ""
ms.suite: ""
ms.technology:
- "dbe-high-availability"
ms.tgt_pltfrm: ""
ms.topic: "article"
helpviewer_keywords:
- "Availability Groups [SQL Server], PowerShell cmdlets"
- "Availability Groups [SQL Server], about"
- "PowerShell [SQL Server], cmdlets"
ms.assetid: b3fef0d5-b6d7-4386-a0f0-d06c165ad4de
caps.latest.revision: 36
author: "MikeRayMSFT"
ms.author: "mikeray"
manager: "jhubbard"
---
# Overview of PowerShell Cmdlets for Always On Availability Groups (SQL Server)
[!INCLUDE[tsql-appliesto-ss2016-xxxx-xxxx-xxx_md](../../../includes/tsql-appliesto-ss2016-xxxx-xxxx-xxx-md.md)]
[!INCLUDE[msCoName](../../../includes/msconame-md.md)] PowerShell is a task-based command-line shell and scripting language designed especially for system administration. [!INCLUDE[ssHADR](../../../includes/sshadr-md.md)] provides a set of PowerShell cmdlets in [!INCLUDE[ssCurrent](../../../includes/sscurrent-md.md)] that enable you to deploy, manage, and monitor availability groups, availability replicas, and availability databases.
> [!NOTE]
> A PowerShell cmdlet can complete by successfully initiating an action. This does not indicate that the intended work, such as the fail over of an availability group, has completed. When scripting a sequence of actions, you might have to check the status of actions, and wait for them to complete.
This topic introduces the cmdlets for the following sets of tasks:
- [Configuring a server instance for Always On Availability Groups](#ConfiguringServerInstance)
- [Backing up and restoring databases and transaction logs](#BnRcmdlets)
- [Creating and managing an availability group](#DeployManageAGs)
- [Creating and managing an availability group listener](#AGlisteners)
- [Creating and managing an availability replica](#DeployManageARs)
- [Adding and managing an availability database](#DeployManageDbs)
- [Monitoring availability group health](#MonitorTblshtAGs)
> [!NOTE]
> For a list of topics in [!INCLUDE[ssCurrent](../../../includes/sscurrent-md.md)] Books Online that describe how to use cmdlets to perform [!INCLUDE[ssHADR](../../../includes/sshadr-md.md)] tasks, see the "Related Tasks" section of [Overview of Always On Availability Groups (SQL Server)](../../../database-engine/availability-groups/windows/overview-of-always-on-availability-groups-sql-server.md).
## Configuring a Server Instance for Always On Availability Groups
|Cmdlets|Description|Supported on|
|-------------|-----------------|------------------|
|**Disable-SqlAlwaysOn**|Disables the [!INCLUDE[ssHADR](../../../includes/sshadr-md.md)] feature on a server instance.|The server instance that is specified by the **Path**, **InputObject**, or **Name** parameter. (Must be an edition of [!INCLUDE[ssNoVersion](../../../includes/ssnoversion-md.md)] that supports [!INCLUDE[ssHADR](../../../includes/sshadr-md.md)].)|
|**Enable-SqlAlwaysOn**|Enables [!INCLUDE[ssHADR](../../../includes/sshadr-md.md)] on an instance of [!INCLUDE[ssCurrent](../../../includes/sscurrent-md.md)] that supports the [!INCLUDE[ssHADR](../../../includes/sshadr-md.md)] feature. For information about support for [!INCLUDE[ssHADR](../../../includes/sshadr-md.md)], see [Prerequisites, Restrictions, and Recommendations for Always On Availability Groups (SQL Server)](../../../database-engine/availability-groups/windows/prereqs-restrictions-recommendations-always-on-availability.md).|Any edition of [!INCLUDE[ssNoVersion](../../../includes/ssnoversion-md.md)] that supports [!INCLUDE[ssHADR](../../../includes/sshadr-md.md)].|
|**New-SqlHadrEndPoint**|Creates a new database mirroring endpoint on a server instance. This endpoint is required for data movement between primary and secondary databases.|Any instance of [!INCLUDE[ssNoVersion](../../../includes/ssnoversion-md.md)]|
|**Set-SqlHadrEndpoint**|Changes the properties of an existing database mirroring endpoint, such as the name, state, or authentication properties.|A server instance that supports [!INCLUDE[ssHADR](../../../includes/sshadr-md.md)] and lacks a database mirroring endpoint|
## Backing Up and Restoring Databases and Transaction Logs
|Cmdlets|Description|Supported on|
|-------------|-----------------|------------------|
|**Backup-SqlDatabase**|Creates a data or log backup.|Any online database (for [!INCLUDE[ssHADR](../../../includes/sshadr-md.md)], a database on the server instance that hosts the primary replica)|
|**Restore-SqlDatabase**|Restores a backup.|Any instance of [!INCLUDE[ssNoVersion](../../../includes/ssnoversion-md.md)] (for [!INCLUDE[ssHADR](../../../includes/sshadr-md.md)], a server instance that hosts a secondary replica)
**\*\* Important \*\*** When preparing a secondary database, you must use the **-NoRecovery** parameter in every **Restore-SqlDatabase** command.|
For information about using these cmdlets to prepare a secondary database, see [Manually Prepare a Secondary Database for an Availability Group (SQL Server)](../../../database-engine/availability-groups/windows/manually-prepare-a-secondary-database-for-an-availability-group-sql-server.md).
## Creating and Managing an Availability Group
|Cmdlets|Description|Supported on|
|-------------|-----------------|------------------|
|**New-SqlAvailabilityGroup**|Creates a new availability group.|Server instance to host primary replica|
|**Remove-SqlAvailabilityGroup**|Deletes availability group.|HADR-enabled server instance|
|**Set-SqlAvailabilityGroup**|Sets the properties of an availability group; take an availability group online/offline|Server instance that hosts primary replica|
|**Switch-SqlAvailabilityGroup**|Initiates one of the following forms of failover:
A forced failover of an availability group (with possible data loss).
A manual failover of an availability group.|Server instance that hosts target secondary replica|
## Creating and Managing an Availability Group Listener
|Cmdlet|Description|Supported on|
|------------|-----------------|------------------|
|**New-SqlAvailabilityGroupListener**|Creates a new availability group listener and attaches it to an existing availability group.|Server instance that hosts primary replica|
|**Set-SqlAvailabilityGroupListener**|Modifies the port setting on an existing availability group listener.|Server instance that hosts primary replica|
|**Add-SqlAvailabilityGroupListenerStaticIp**|Adds a static IP address to an existing availability group listener configuration. The IP address can be an IPv4 address with subnet, or an IPv6 address.|Server instance that hosts primary replica|
## Creating and Managing an Availability Replica
|Cmdlets|Description|Supported on|
|-------------|-----------------|------------------|
|**New-SqlAvailabilityReplica**|Creates a new availability replica. You can Use the **-AsTemplate** parameter to create an in-memory availability-replica object for each new availability replica.|Server instance that hosts primary replica|
|**Join-SqlAvailabilityGroup**|Joins a secondary replica to the availability group.|Server instance that hosts secondary replica|
|**Remove-SqlAvailabilityReplica**|Deletes an availability replica.|Server instance that hosts primary replica|
|**Set-SqlAvailabilityReplica**|Sets the properties of an availability replica.|Server instance that hosts primary replica|
## Adding and Managing an Availability Database
|Cmdlets|Description|Supported on|
|-------------|-----------------|------------------|
|**Add-SqlAvailabilityDatabase**|On the primary replica, adds a database to an availability group.
On a secondary replica, joins a secondary database to an availability group.|Any server instance that hosts an availability replica (behavior differs for primary and secondary replicas)|
|**Remove-SqlAvailabilityDatabase**|On the primary replica, removes the database from the availability group.
On a secondary replica, removes the local secondary database from the local secondary replica.|Any server instance that hosts an availability replica (behavior differs for primary and secondary replicas)|
|**Resume-SqlAvailabilityDatabase**|Resumes the data movement for a suspended availability database.|The server instance on which the database was suspended.|
|**Suspend-SqlAvailabilityDatabase**|Suspends the data movement for an availability database.|Any server instance that hosts an availability replica.|
## Monitoring Availability Group Health
The following [!INCLUDE[ssNoVersion](../../../includes/ssnoversion-md.md)] cmdlets enable you to monitor the health of an availability group and its replicas and databases.
> [!IMPORTANT]
> You must have CONNECT, VIEW SERVER STATE, and VIEW ANY DEFINITION permissions to execute these cmdlets.
|Cmdlet|Description|Supported on|
|------------|-----------------|------------------|
|**Test-SqlAvailabilityGroup**|Assesses the health of an availability group by evaluating SQL Server policy based management (PBM) policies.|Any server instance that hosts an availability replica.*|
|**Test-SqlAvailabilityReplica**|Assesses the health of availability replicas by evaluating SQL Server policy based management (PBM) policies.|Any server instance that hosts an availability replica.*|
|**Test-SqlDatabaseReplicaState**|Assesses the health of an availability database on all joined availability replicas by evaluating SQL Server policy based management (PBM) policies.|Any server instance that hosts an availability replica.*|
*To view information about all of the availability replicas in an availability group, use to the server instance that hosts the primary replica.
For more information, see [Use Always On Policies to View the Health of an Availability Group (SQL Server)](../../../database-engine/availability-groups/windows/use-always-on-policies-to-view-the-health-of-an-availability-group-sql-server.md).
## See Also
[Overview of Always On Availability Groups (SQL Server)](../../../database-engine/availability-groups/windows/overview-of-always-on-availability-groups-sql-server.md)
[Get Help SQL Server PowerShell](../../../relational-databases/scripting/get-help-sql-server-powershell.md)