Festlegen eines statischen TCP-Ports bei der unbeaufsichtigten Installation von SQL Server

Festlegen eines statischen TCP-Ports bei der unbeaufsichtigten Installation von SQL Server

Ich habe eine unbeaufsichtigte Installation von SQL Server 2016 mithilfe der .INIAntwortdatei. In meiner Antwortdatei aktiviere ich TCP wie folgt:

; Specify 0 to disable or 1 to enable the TCP/IP protocol. 
TCPENABLED="1"

Sobald die Installation abgeschlossen ist, erstelle ich mithilfe eines PowerShell-Skripts auch einen Alias. Soweit, so gut. Allerdings ist die SQL Server-Instanz mit aktivierten dynamischen Ports installiert und ich sehe in der Antwortdatei keine Möglichkeit, einen statischen TCP-Port anzugeben (ich möchte den Standard 1433 verwenden). Daher funktioniert der Alias ​​nicht.

Wie kann ich einen statischen TCP-Port festlegen, entweder über die Antwortdatei oder mithilfe von PowerShell?

Antwort1

Nach stundenlanger Suche nach einer praktikablen Lösung bin ich auf diese PowerShell-Funktion gestoßen, mit der der TCP-Port einer bestimmten SQL Server-Instanz festgelegt werden kann:

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("")
            }
        }
    }
}

Nun wird diese Funktion folgendermaßen verwendet:

SetPort "SQLInstance" 1433

Das Skript soll mit erhöhten Rechten ausgeführt werden, d.h.Als Administrator ausführen.

Credits gehen andieser Blog-Beitragdas hat mich in die richtige Richtung gelenkt.

verwandte Informationen