
У меня есть автоматическая установка SQL Server 2016 с использованием .INI
файла ответов. В моем файле ответов я включаю TCP следующим образом:
; Specify 0 to disable or 1 to enable the TCP/IP protocol.
TCPENABLED="1"
После завершения установки я также создаю псевдоним с помощью скрипта PowerShell. Пока все хорошо. Однако экземпляр SQL Server установлен с включенными динамическими портами, и я не вижу способа указать статический порт TCP (я хочу использовать стандартный 1433) в файле ответов. Поэтому псевдоним не будет работать.
Как установить статический TCP-порт с помощью файла ответов или PowerShell?
решение1
После долгих часов поиска приемлемого решения я придумал эту функцию PowerShell, которая может установить TCP-порт определенного экземпляра 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("")
}
}
}
}
Теперь эта функция используется следующим образом:
SetPort "SQLInstance" 1433
Скрипт должен быть запущен с повышенными правами, т.е.Запустить от имени администратора.
Кредиты идут кэтот пост в блогечто указало мне правильное направление.