
Tengo una instalación desatendida de SQL Server 2016 usando el .INI
archivo de respuesta. En mi archivo de respuesta, habilito TCP de esta manera:
; Specify 0 to disable or 1 to enable the TCP/IP protocol.
TCPENABLED="1"
Una vez finalizada la instalación, también creo un alias usando un script de PowerShell. Hasta ahora, todo bien. Sin embargo, la instancia de SQL Server está instalada con los puertos dinámicos habilitados y no veo una manera de especificar un puerto TCP estático (quiero usar el estándar 1433) en el archivo de respuesta. Por tanto, el alias no funcionará.
¿Cómo puedo configurar un puerto TCP estático, ya sea a través del archivo de respuesta o usando PowerShell?
Respuesta1
Después de largas horas buscando una solución viable, se me ocurrió esta función de PowerShell que puede configurar el puerto TCP de una instancia específica de 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("")
}
}
}
}
Ahora, esta función se usa así:
SetPort "SQLInstance" 1433
El script se ejecutará elevado, es decirEjecutar como administrador.
créditos van aesta publicación de bloglo que me indicó la dirección correcta.