PowerShell로 SQL Server 2016 자동 설치

PowerShell로 SQL Server 2016 자동 설치

2022-10-05 last update

17 minutes reading PowerShell SQLServer
DB 서버의 구축을 자동화하고 싶어서 PowerShell과 놀았다.

ISO 파일 탑재



먼저 SQL Server 2016 ISO 파일을 마운트합니다.
$isoPath = "E:\ISO\SQLServer2016.iso"
Mount-DiskImage $isoPath

마운트 대상 드라이브 얻기



설치 프로그램을 실행하기 위해 마운트할 드라이브를 가져옵니다.
$driveLetter = (Get-DiskImage -ImagePath $isoPath | Get-Volume).DriveLetter
$driveRootPath = "{0}:\" -f $driveLetter

SQL Server 2016 자동 설치



SETUP.exe를 실행합니다.
「-Verb runas」로 관리자 권한으로 실행할 수 있다.
「-Wait」로 실행 완료까지 대기한다.
$sQLServerSetupExe = $driveRootPath + "SETUP.exe"
$scriptDir=Split-Path $MyInvocation.MyCommand.Path -Parent
$confPath=$scriptDir+"\..\Config\ConfigurationFile.ini"
Start-Process -FilePath $sQLServerSetupExe -ArgumentList "/SAPWD=$password /IAcceptSQLServerLicenseTerms=True /Configurationfile=$confPath" -Verb runas -Wait

/SAPWD에서 sa의 암호를 지정합니다.
/IAcceptSQLServerLicenseTerms를 활성화하지 않으면 자동 설치가 불가능합니다.
/Configurationfile에 구성 파일의 경로를 지정합니다.
ConfigurationFile.ini는 스스로 준비할 필요가 있다.
GUI로 설치를 진행하여 작성할 수도 있다.

ConfigurationFile.ini
;SQL Server 2016 Configuration File
[OPTIONS]

; INSTALL、UNINSTALL、UPGRADE などのセットアップ ワークフローを指定します。これは必須のパラメーターです。 

ACTION="Install"

; コマンド ラインから実行する際は、SQL Server セットアップがプライバシーに関する声明を表示しないように指定します。 

SUPPRESSPRIVACYSTATEMENTNOTICE="False"

; このパラメーターを指定し、Microsoft R オープンおよび Microsoft R サーバーの条件を承諾すると、使用条件を読み理解したことに同意いただいたとみなされます。 

IACCEPTROPENLICENSETERMS="False"

; ローカライズ版の Windows オペレーティング システムに英語版の SQL Server をインストールするには、/ENU パラメーターを使用します。 

ENU="False"

; ユーザー インターフェイスは表示されません。 

QUIET="False"

; ユーザー操作はなく、進行状況だけが表示されます。 

QUIETSIMPLE="True"

; ユーザー インターフェイスの動作を制御するパラメーターです。有効な値は Normal (完全な UI の場合)、AutoAdvance (簡易 UI の場合)、および EnableUIOnServerCore (GUI ブロックをバイパスする Server Core セットアップの場合) です。 

; UIMODE="Normal"

; SQL Server セットアップで更新プログラムを検出して含める必要があるかどうかを指定します。有効な値は、True と False または 1 と 0 です。既定では、SQL Server セットアップには、検出された更新プログラムが含まれます。 

UpdateEnabled="True"

; このパラメーターが指定された場合、このコンピューターでは Microsoft Update を使用して更新プログラムが確認されます。 

USEMICROSOFTUPDATE="False"

; インストール、アンインストール、またはアップグレードを行う機能を指定します。最上位の機能には、SQL、AS、RS、IS、MDS、ツールなどがあります。SQL 機能では、データベース エンジン、レプリケーション、フルテキスト、および Data Quality Services (DQS) サーバーがインストールされます。ツール機能では、Management Tools、Books オンライン コンポーネント、SQL Server Data Tools、その他の共有コンポーネントがインストールされます。 

FEATURES=SQLENGINE,CONN,BC,SDK,BOL,SNAC_SDK

; SQL Server セットアップが更新プログラムを取得する場所を指定します。有効な値は、"MU" (Microsoft Update を検索)、有効なフォルダー パス、.\MyUpdates のような相対パス、または UNC 共有です。既定では、SQL Server セットアップは Microsoft Update を検索するか、Window Server Update Services を通じて Windows Update サービスを検索します。 

UpdateSource="MU"

; コマンド ライン パラメーターの使用方法を表示します 

HELP="False"

; 詳細なセットアップ ログをコンソールにパイプすることを指定します。 

INDICATEPROGRESS="False"

; セットアップで WOW64 にインストールするよう指定します。このコマンド ライン引数は、IA64 や 32 ビット システム上ではサポートされません。 

X86="False"

; 既定のインスタンスまたは名前付きインスタンスを指定します。既定のインスタンスは、Express 以外のエディションの場合は MSSQLSERVER、Express エディションの場合は SQLExpress です。SQL Server データベース エンジン (SQL)、Analysis Services (AS)、または Reporting Services (RS) のインストール時には、このパラメーターが必須です。 

INSTANCENAME="TEST_INSTANCE"

; 共有コンポーネントのルート インストール ディレクトリを指定します。このディレクトリは、共有コンポーネントのインストール後は変更されません。 

INSTALLSHAREDDIR="C:\Program Files\Microsoft SQL Server"

; WOW64 共有コンポーネントのルート インストール ディレクトリを指定します。このディレクトリは、WOW64 共有コンポーネントのインストール後は変更されません。 

INSTALLSHAREDWOWDIR="C:\Program Files (x86)\Microsoft SQL Server"

; 指定した SQL Server 機能のインスタンス ID を指定してください。SQL Server のディレクトリ構造、レジストリ構造、およびサービス名には、SQL Server インスタンスのインスタンス ID が組み込まれます。 

INSTANCEID="TEST"

; TelemetryUserNameConfigDescription 

SQLTELSVCACCT="NT Service\SQLTELEMETRY$TEST"

; TelemetryStartupConfigDescription 

SQLTELSVCSTARTUPTYPE="Automatic"

; インストール ディレクトリを指定します。 

INSTANCEDIR="C:\Program Files\Microsoft SQL Server"

; エージェント アカウント名 

AGTSVCACCOUNT="NT Service\SQLAgent$TEST"

; インストール後にサービスを自動的に開始します。 

AGTSVCSTARTUPTYPE="Manual"

; CM ブリックの TCP 通信ポート 

COMMFABRICPORT="0"

; マトリックスでのプライベート ネットワークの使用方法 

COMMFABRICNETWORKLEVEL="0"

; ブリック間の通信を保護する方法 

COMMFABRICENCRYPTION="0"

; CM ブリックで使用される TCP ポート 

MATRIXCMBRICKCOMMPORT="0"

; SQL Server サービスのスタートアップの種類。 

SQLSVCSTARTUPTYPE="Automatic"

; FILESTREAM 機能を有効にするレベル (0、1、2、または 3)。 

FILESTREAMLEVEL="3"

; FILESTREAM ファイル I/O 用に作成する Windows 共有の名前。 

FILESTREAMSHARENAME="TEST"

; SQL Server Express で RANU を有効にするには、"1" に設定します。 

ENABLERANU="False"

; データベース エンジンに使用する Windows 照合順序または SQL 照合順序を指定します。 

SQLCOLLATION="Japanese_CI_AS"

; SQL Server サービスのアカウント: ドメイン\ユーザーまたはシステム アカウント。 

SQLSVCACCOUNT="NT Service\MSSQL$TEST"

; SQL Server サービスのファイルのインスタント初期化を有効にするには "True" に設定します。有効になると、セットアップは、Perform Volume Maintenance Task 特権をデータベース エンジン サービス SID に付与します。承認されていないプリンシパルが削除されたコンテンツにアクセスできてしまうことがあるため、情報漏えいにつながるおそれがあります。 

SQLSVCINSTANTFILEINIT="False"

; SQL Server のシステム管理者として準備する Windows アカウント。 

SQLSYSADMINACCOUNTS="WORKGROUP\user" "TEST\Administrator"

; 既定値は Windows 認証です。混合モード認証の場合は "SQL" を使用してください。 

SECURITYMODE="SQL"

; データベース エンジンの TempDB ファイルの数。 

SQLTEMPDBFILECOUNT="4"

; データベース エンジン TempDB データ ファイルの初期サイズを MB 単位で指定します。 

SQLTEMPDBFILESIZE="8"

; 各データベース エンジン TempDB データ ファイルの自動拡張増分値を MB 単位で指定します。 

SQLTEMPDBFILEGROWTH="64"

; データベース エンジン TempDB ログ ファイルの初期サイズを MB 単位で指定します。 

SQLTEMPDBLOGFILESIZE="8"

; 各データベース エンジン TempDB ログ ファイルの自動拡張増分値を MB 単位で指定します。 

SQLTEMPDBLOGFILEGROWTH="64"

; データベース エンジンのルート データ ディレクトリ。 

INSTALLSQLDATADIR="E:\TEST"

; データベース エンジンのバックアップ ファイルの既定のディレクトリ。 

SQLBACKUPDIR="E:\TEST\Backup"

; データベース エンジンのユーザー データベースの既定のディレクトリ。 

SQLUSERDBDIR="E:\TEST\Data"

; データベース エンジンの TempDB ファイルのディレクトリ。 

SQLTEMPDBDIR="E:\TEST\Data"

; 現在のユーザーを %SQL_PRODUCT_SHORT_NAME% Express のデータベース エンジン システム管理者として準備します。 

ADDCURRENTUSERASSQLADMIN="False"

; TCP/IP プロトコルを無効にするには 0 を、有効にするには 1 を指定します。 

TCPENABLED="1"

; Named Pipes プロトコルを無効にするには 0 を、有効にするには 1 を指定します。 

NPENABLED="0"

; Browser サービスのスタートアップの種類。 

BROWSERSVCSTARTUPTYPE="Automatic"


"QUIETSIMPLE="True""에서 진행 상황을 표시하면 좋을지도.

ISO 파일 마운트 해제



설치가 완료되면 마운트를 해제합니다.
Dismount-DiskImage $isoPath

요약



아래에서 SQL Server 2016을 자동 설치할 수 있습니다.
스크립트를 두드리는 것만으로 SQL Server를 설치할 수 있습니다.
$scriptDir=Split-Path $MyInvocation.MyCommand.Path -Parent
$isoPath = $scriptDir + "\..\ISO\SQLServer2016.iso"
$confPath = $scriptDir + "\..\Config\ConfigurationFile.ini"

# ISOマウント
Mount-DiskImage $isoPath

# ドライブ取得
$driveLetter = (Get-DiskImage -ImagePath $isoPath | Get-Volume).DriveLetter
$driveRootPath = "{0}:\" -f $driveLetter
$sQLServerSetupExe = $driveRootPath + "SETUP.exe"

# SQL Server2016インストール
Start-Process -FilePath $sQLServerSetupExe -ArgumentList "/SAPWD=$password /IAcceptSQLServerLicenseTerms=True /Configurationfile=$confPath" -Verb runas -Wait

# ISOマウント解除
Dismount-DiskImage $isoPath