#PSTip Creating a SQL TCP mirroring endpoint with SMO and PowerShell

Note: This tip requires PowerShell 2.0 or above.

In today’s tip, we will see how we can use PowerShell and SMO to create a SQL TCP mirroring endpoint. We can use the [Create()][1] method of [Microsoft.SqlServer.Management.Smo.Endpoint][2] class to create an endpoint. In the following function, I used the code we published in [earlier tips][3] to verify whether an endpoint exists or not. So, to be able to use this function, you need the [Get-SQLEndpoint][4] function from an earlier tip.



    Function New-SQLMirroringTCPEndpoint {
        [CmdletBinding()]
        param (
            [string]$computername=$env:COMPUTERNAME,
            [string]$instancename,
            [string]$endpointname,
            [int]$endpointport
        )
        Begin {
            Write-Verbose "Loading SQL SMO"
            Add-Type -AssemblyName "Microsoft.SqlServer.Smo, Version=10.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91"
            Add-Type -AssemblyName "Microsoft.SqlServer.ConnectionInfo, Version=11.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91"
        }
    
        Process {
                try {
                    $connection = New-Object Microsoft.SqlServer.Management.Common.ServerConnection -ArgumentList $ComputerName
                    $connection.applicationName = "PowerShell SQL SMO"
    
                    if ($instancename) {
                        Write-Verbose "Connecting to SQL named instance"
                        $connection.ServerInstance = "${env:computername}\${instancename}"
                    } else {
                        Write-Verbose "Connecting to default SQL instance"
                    }
    
                    $connection.StatementTimeout = 0
                    $connection.Connect()
                    $smo = New-Object Microsoft.SqlServer.Management.Smo.Server -ArgumentList $connection
                }
                catch {
                    Write-Error $_
                }
    
                try {
                    if (!($smo.Endpoints[$endpointname])) {
                        if (!((Get-SQLEndPoint -computername $computername -instancename $instancename).ListenerPort -contains $endpointport)) {
                            Write-Verbose "Creating a mirroring endpoint named ${endpointname} at port ${endpointport}"
                            $SQLEndPoint = New-Object Microsoft.SqlServer.Management.Smo.Endpoint -ArgumentList $smo, $endpointname
                            $SQLEndPoint.EndpointType = [Microsoft.SqlServer.Management.Smo.EndpointType]::DatabaseMirroring
                            $SQLEndPoint.ProtocolType = [Microsoft.SqlServer.Management.Smo.ProtocolType]::TCP
                            $SQLEndPoint.Protocol.Tcp.ListenerPort = $endpointport
                            $SQLEndPoint.Payload.DatabaseMirroring.ServerMirroringRole = [Microsoft.SqlServer.Management.Smo.ServerMirroringRole]::All
                            $SQLEndPoint.Create()
                            $SQLEndPoint.Start()
                            $smo.Endpoints[$endpointname]
                        } else {
                            Write-Error "An endpoint with specified port number ${endpointport} already exists"
                        }
                    } else {
                        Write-Error "An endpoint with name ${endpointname} already exists"
                    }
                }
    
                catch {
                    Write-Error $_
                }
        }
    }
The way we use this function is simple.

```
#To create an endpoint on the local computer with default SQL instance
New-SQLMirroringTCPEndpoint -endpointname TestEndPoint -endpointport 8888

#To create an endpoint on a remote computer with  a named SQL instance
New-SQLMirroringTCPEndpoint -computername server01 -instancename mySQLInstance -endpointname testendpoint -endpointport 9999
```

[1]: http://msdn.microsoft.com/en-us/library/microsoft.sqlserver.management.smo.endpoint.create.aspx
[2]: http://msdn.microsoft.com/en-us/library/microsoft.sqlserver.management.smo.endpoint.aspx
[3]: /tag/smo/
[4]: /2013/06/03/pstip-list-all-endpoints-in-a-sql-deployment/
comments powered by Disqus