
Tenho uma instalação autônoma do SQL Server 2016 usando o .INI
arquivo de resposta. No meu arquivo de resposta, habilito o TCP assim:
; Specify 0 to disable or 1 to enable the TCP/IP protocol.
TCPENABLED="1"
Assim que a instalação for concluída, também crio um alias usando um script do PowerShell. Até agora tudo bem. No entanto, a instância do SQL Server está instalada com portas dinâmicas habilitadas e não consigo ver uma maneira de especificar uma porta TCP estática (quero usar o padrão 1433) no arquivo de resposta. Portanto, o alias não funcionará.
Como posso definir uma porta TCP estática, por meio do arquivo de resposta ou usando o PowerShell?
Responder1
Depois de longas horas procurando por uma solução viável, descobri esta função do PowerShell que pode definir a porta TCP de uma instância específica do SQL Server:
function SetPort($instance, $port)
{
# fetch the WMI object that contains TCP settings; filter for the 'IPAll' setting only
# note that the 'ComputerManagement13' corresponds to SQL Server 2016
$settings = Get-WmiObject `
-Namespace root/Microsoft/SqlServer/ComputerManagement13 `
-Class ServerNetworkProtocolProperty `
-Filter "InstanceName='$instance' and IPAddressName='IPAll' and PropertyType=1 and ProtocolName='Tcp'"
# there are two settings in a list: TcpPort and TcpDynamicPorts
foreach ($setting in $settings)
{
if ($setting -ne $null)
{
# set the static TCP port and at the same time clear any dynamic ports
if ($setting.PropertyName -eq "TcpPort")
{
$setting.SetStringValue($port)
}
elseif ($setting.PropertyName -eq "TcpDynamicPorts")
{
$setting.SetStringValue("")
}
}
}
}
Agora, esta função é usada assim:
SetPort "SQLInstance" 1433
O script deve ser executado elevado, ou sejaExecutar como administrador.
Os créditos vão paraesta postagem do blogque me apontou a direção certa.