我使用应答文件进行了 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
该脚本应以提升方式运行,即以管理员身份运行。
致谢这篇博文这为我指明了正确的方向。