今回はPowerShellを利用して、SQL Serverの設定値を一括で取得する方法をご紹介します。
パラメータシートなど作成する際に便利だと思います。
スクリプト
今回作成したスクリプトは、直接実行したいクエリを記載せずに、ファイルを読み込んでクエリを実行する方法をとっています。
そうすることで、複雑なクエリを実行することができます。
スクリプトの中では、以下のファイルを読み込んだり、出力したりしています。
- parameter_check.sql
- パラーメーターをチェックするためのクエリです
- properties.csv
- parameter_check.sqlの実行結果をCSV出力する時のファイル名です。
- username_check.sql
- ユーザー名をチェックするためのクエリです
- username.csv
- username_check.sqlの実行結果をCSV出力する時のファイル名です。
- Summary.txt
- SQL Serverのインストール時にどのコンポーネントがインストールされたか、インストールディレクトリがどこであったかなどの情報を出力します
実際に利用したPowerShellのスクリプトは以下のようになります。
#スクリプト実行パスを取得
$CurrentDir = Split-Path $MyInvocation.MyCommand.Path
# DB接続情報設定(SQL実行用)
$strServer = 'localhost'; # サーバーを指定
$strDatabase = 'master'; # データベースを指定
$strUserId = 'azureuser'; # ユーザーIDを指定
$strPassword = 'P@ssw0rd1234'; # パスワードを指定
# DB接続情報設定(DBオープン用)
$ConnectionString=New-Object -TypeName System.Data.SqlClient.SqlConnectionStringBuilder
$ConnectionString['Data Source'] = "localhost"
$ConnectionString['Initial Catalog'] = "master"
$ConnectionString['Integrated Security']= "TRUE"
#DB接続準備
$SqlConnection = New-Object System.Data.SqlClient.SqlConnection($ConnectionString)
$SqlCommand = New-Object System.Data.SqlClient.SqlCommand($TableListQuery, $SqlConnection)
#DBオープン
$SqlConnection.Open()
#パラメーター確認、CSV出力SQL実行
Invoke-Sqlcmd -InputFile $CurrentDir\parameter_check.sql
#プロパティ確認、CSV出力SQL実行
$Properties=Invoke-Sqlcmd -InputFile $CurrentDir\properties_check.sql
$Properties | Export-CSV -Path "C:\sqlparameters\properties.csv"
#ユーザー確認、CSV出力SQL実行
$Username=Invoke-Sqlcmd -InputFile $CurrentDir\username_check.sql
$Username | Export-CSV -Path "C:\sqlparameters\username.csv"
#バージョン番号指定
$LatestVersionDir = Get-ChildItem -Path "$env:ProgramFiles\Microsoft SQL Server" | Where-Object { $_.PSIsContainer -and $_.Name -match '^\d+$' } | Sort-Object -Property {[int]$_.Name} -Descending | Select-Object -First 1
#summary.txtコピー
Copy-Item "$env:ProgramFiles\Microsoft SQL Server\$($LatestVersionDir.Name)\Setup Bootstrap\Log\Summary.txt" -Destination "C:\sqlparameters\"
#DBクローズ
$SqlConnection.Close()
さいごに
今回のように、実行するクエリをファイルとして読み込ませることで、SQLの処理をループで実行することができます。そうすることで、各ユーザデータベースの設定値を自動で取得することが可能です。
SQLのスクリプトの中身は長くなってしまうので、次回のブログでご紹介します。