LoginSignup
0
3

More than 5 years have passed since last update.

PowerShellでリモート接続出来るようにSQL Serverを設定する

Posted at

外部マシンからSQL Serverにリモート接続出来るようにスクリプトを書いてみた。

やることは以下。

  1. SQL ServerのTCP/IPを有効にする
  2. SQL Serverのポートをデフォルトの1433にする
  3. DBサーバーのファイアウォールを編集してSQL Serverで使用するポートを開放する

SQL ServerのTCP/IPを有効にする

SQL Server PowerShellモジュールを使ってSQL Serverの設定を編集する。
Alter()を呼び出して、SQL Serverを再起動しないと変更が反映されないので注意。

$dBServerName = "NEW"
$dBInstanceName = "TEST"
$sQLServerServiceName = "SQL Server (TEST)"

Import-Module 'sqlps'
$uri = "ManagedComputer[@Name='{0}']/ ServerInstance[@Name='{1}']/ServerProtocol[@Name='Tcp']" -f $dBServerName, $dBInstanceName
$wmi = New-Object 'Microsoft.SqlServer.Management.Smo.Wmi.ManagedComputer'

# TCP/IPを有効にする
$tcp = $wmi.GetSmoObject($uri)
$tcp.IsEnabled = $true
$tcp.Alter()

# SQL Serverを再起動する
net stop $sQLServerServiceName /y
net start $sQLServerServiceName

SQL Serverのポートをデフォルトの1433にする

「SQL ServerのTCP/IPを有効にする」とほぼ同様。
こちらもAlter()を呼び出して、SQL Serverを再起動しないと変更が反映されないので注意。

$dBServerName = "NEW"
$dBInstanceName = "TEST"
$port = "1433"
$sQLServerServiceName = "SQL Server (TEST)"

Import-Module 'sqlps'
$uri = "ManagedComputer[@Name='{0}']/ ServerInstance[@Name='{1}']/ServerProtocol[@Name='Tcp']" -f $dBServerName, $dBInstanceName
$wmi = New-Object 'Microsoft.SqlServer.Management.Smo.Wmi.ManagedComputer'

# ポートを1433に設定する
$tcp = $wmi.GetSmoObject($uri)
$wmi.GetSmoObject($uri + "/IPAddress[@Name='IPAll']").IPAddressProperties[1].Value = $port
$tcp.Alter()

# SQL Serverを再起動する
net stop $sQLServerServiceName /y
net start $sQLServerServiceName

DBサーバーのファイアウォールを編集してSQL Serverで使用するポートを開放する

New-NetFirewallRuleでファイアウォールにルールを追加するだけ。
ちなみに「`」でコマンドを途中で改行することが出来る。

New-NetFirewallRule `
    -Name "SQLServer(1433)" `
    -DisplayName "SQLServer(1433)" `
    -Description "SQL Serverで使用するポート(1433)を開放する。" `
    -Enabled True `
    -Profile Domain,Private `
    -Direction Inbound `
    -Action Allow `
    -Program Any `
    -LocalAddress Any `
    -RemoteAddress Any `
    -Protocol TCP `
    -LocalPort 1433

まとめ

スクリプト書くのたのしくなってきた。

$dBServerName = "NEW"
$dBInstanceName = "TEST"
$port = "1433"
$sQLServerServiceName = "SQL Server (TEST)"

Import-Module 'sqlps'
$uri = "ManagedComputer[@Name='{0}']/ ServerInstance[@Name='{1}']/ServerProtocol[@Name='Tcp']" -f $dBServerName, $dBInstanceName
$wmi = New-Object 'Microsoft.SqlServer.Management.Smo.Wmi.ManagedComputer'

# TCP/IPを有効にする
$tcp = $wmi.GetSmoObject($uri)
$tcp.IsEnabled = $true
$tcp.Alter()

# ポートを1433に設定する
$wmi.GetSmoObject($uri + "/IPAddress[@Name='IPAll']").IPAddressProperties[1].Value = $port
$tcp.Alter()

# SQL Serverを再起動する
net stop $sQLServerServiceName /y
net start $sQLServerServiceName

# 1433開放!
New-NetFirewallRule `
    -Name "SQLServer(1433)" `
    -DisplayName "SQLServer(1433)" `
    -Description "SQL Serverで使用するポート(1433)を開放する。" `
    -Enabled True `
    -Profile Domain,Private `
    -Direction Inbound `
    -Action Allow `
    -Program Any `
    -LocalAddress Any `
    -RemoteAddress Any `
    -Protocol TCP `
    -LocalPort 1433
0
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
3