I written an article about “SQL Server 2012: Configuring your TCP Port via PowerShell” and I received a question from PaulJ:
“How do you set the port for the SQL Native Client 11.0 Configuration (32bit) – as seen in the SQL Configuration Manager?”
This is a very good question and I decide to write this blog as an answer to this question.
The first step is always the same, initialization of my object:
[reflection.assembly]::LoadWithPartialName("Microsoft.SqlServer.SqlWmiManagement") | Out-Null $wmi = New-Object ("Microsoft.SqlServer.Management.Smo.Wmi.ManagedComputer")
The second step is used to know for which client protocol the setting belongs to.
In the class “Microsoft.SqlServer.Management.Smo.Wmi.ManagedComputer”, you find a property “ClientProtocols” as you can see in the msdn web page:
I display the name and the protocol Properties with this command:
$wmi.ClientProtocols | Select displayname -ExpandProperty ProtocolProperties
As you can see, I have 4 client protocols (Named Pipes, default port, KEEPALIVE and KEEPALIVEINTERVAL).
The next step is to select the default port:
$tcp_list = $wmi.ClientProtocols | Where-Object {$_.displayname -eq "TCP/IP"} $default_tcp = $tcp_list.ProtocolProperties | Where-Object {$_.Name -eq "Default Port"} $default_tcp
As you can see, the default client port is set to 1433 and now, I will set another value for this port:
$default_tcp.value=50100
Note: The port has a System.Int32 type
Validate this change with an Alter:
$tcp_list.alter()
To finish, do not forget to restart your services to activate the port change:
$sql_service = ($wmi.Services | Where-Object { $_.Type -eq "SqlServer" }) $sql_service.alter() $sql_service.stop() $sql_service.start()
Et voilà! The default port for the client protocol is changed!