
응답 파일을 사용하여 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
실행 가능한 솔루션을 오랫동안 검색한 끝에 특정 SQL Server 인스턴스의 TCP 포트를 설정할 수 있는 다음 PowerShell 기능을 생각해냈습니다.
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
스크립트는 높은 수준으로 실행되어야 합니다. 즉관리자로 실행.
크레딧은 다음으로 이동합니다.이 블로그 게시물그것은 나에게 올바른 방향을 알려주었습니다.