在 SQL Server 无人值守安装中设置静态 TCP 端口

在 SQL Server 无人值守安装中设置静态 TCP 端口

我使用应答文件进行了 SQL Server 2016 的无人值守安装.INI。在我的应答文件中,我像这样启用 TCP:

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

安装完成后,我还使用 PowerShell 脚本创建了一个别名。到目前为止一切顺利。但是,SQL Server 实例安装时启用了动态端口,我看不到在应答文件中指定静态 TCP 端口(我想使用标准 1433)的方法。因此别名不起作用。

如何通过应答文件或使用 PowerShell 设置静态 TCP 端口?

答案1

经过长时间寻找可行的解决方案后,我想出了这个 PowerShell 函数,它可以设置特定 SQL Server 实例的 TCP 端口:

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

现在,该函数的使用方式如下:

SetPort "SQLInstance" 1433

该脚本应以提升方式运行,即以管理员身份运行

致谢这篇博文这为我指明了正确的方向。

相关内容