PowerShellを使ってSQL Serverの設定値を取得する1

今回は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のスクリプトの中身は長くなってしまうので、次回のブログでご紹介します。

執筆担当者プロフィール
森 尊臣

森 尊臣(日本ビジネスシステムズ株式会社)

ハイブリッドクラウド本部所属。 SQL ServerやAzureを中心としたシステムの設計・構築に携わっています。

担当記事一覧