IT PowerShell Windows Windows Server 2016 Windows Server 2019 WSUS

【PowerShell】WSUSのDB(SUSDB)インデックス再構築を自動実行

投稿日:

今回ご紹介するのはWSUS運用であまり実施されていないSUSDBのインデックス再構築を自動化する方法になります。

PowerShellで実行して結果をメール送信するバージョンとバッチバージョンです。

過去に紹介したWSUSクリーンアップと合わせて自動運用をしてみましょう。

過去記事(【PowerShell】WSUSのクリーンアップを定期的に自動実行)

過去記事(【PowerShell】WSUSのクリーンアップを定期的に自動実行2)

過去記事(【PowerShell】WSUSのクリーンアップを定期的に自動実行3)

事前準備

まずはこちらのJapan WSUS Support Team Blogからwsusdbmaintenance-sqlをダウンロードします。

ファイル名は「WsusDBMaintenance.sql」な感じで変更して任意の場所に保存してください。

続いて、

sqlcmdが実行可能なようにsqlcmdをこちらからダウンロードしてインストールします。

たぶんこちらのsqlsysclrtypesも求められるはずなのでこちらもダウンロードしてインストールします。

 

 

PoweShell スクリプト

以下のソースを 任意の名前.ps1 で保存します。

# メール送信設定
function SendMail{
$ToADDR = "宛先メールアドレスを指定します。複数の場合は ,(カンマ区切りで。"宛先1","宛先2") "
$FromADDR = "送信者メールアドレスを指定します。"
$SMTP = "SMTPサーバーをIPアドレスかFQDN名で指定します。"
$PortNo = "SMTPサーバーのポート番号を指定します。"

# メール送信処理
Send-MailMessage -To $ToADDR -From $FromADDR -SmtpServer $SMTP -Port $PortNo -Subject "$Subject" -Body $MailBody -Encoding UTF8
}

# SUSDBインデックス再構築処理開始通知
$Subject = "【info】SUSDBインデックス再構築処理-開始-"
$MailBody = "インデックス再構築処理を開始します。"
SendMail

# SUSDBインデックス再構築処理
$result = (sqlcmd.exe -S np:\\.\pipe\MICROSOFT##WID\tsql\query -i C:\Script\WsusDBMaintenance.sql)
if($LASTEXITCODE -eq 0){
$Subject = "【info】SUSDBインデックス再構築処理-結果-"
$MailBody = $result -join "`n"
SendMail
}else{
$Subject = "【err】SUSDBインデックス再構築処-理異常終了-"
$MailBody = "インデックス再構築処理がエラー終了しました。`r`n"
SendMail
}

(注)WsusDBMaintenance.sqlのパスとファイル名はご自身の環境に合わせて変えてください

このPowerShellスクリプトを最上位の権限で実行されるようタスクスケジューラに登録すれば自動化完了です。

 

 

バッチファイル

以下のソースを 任意の名前.bat で保存します。

sqlcmd -S np:\\.\pipe\MICROSOFT##WID\tsql\query -i C:\Script\WsusDBMaintenance.sql

(注)WsusDBMaintenance.sqlのパスとファイル名はご自身の環境に合わせて変えてください

PowerShell同様にこれを最上位の権限で実行されるようタスクスケジューラに登録すれば自動化完了です。

メール送信する必要なければこっちで十分!

 

おわりに

終わってしまえばすごくシンプルなPowerShellですがPowerShellでSQLファイルを実行する方法がわからなくて時間かかりました。

結局PowerShell内でsqlcmdを実行する方法しかわからなくてこうなりましたが

初心者な私にはぴったりのわかりやすいものとなりました。

この問題点としては標準エラー出力がPowerShellで拾えてないのでエラー通知でエラーの内容まではわからないってとこですが

まあエラーってことがわかればいいのでこれ以上複雑にするのはやめました。

また調査するのに膨大な時間がかかりそうだったし(笑)

WSUSのDBにWIDじゃなくてSQL Serverを使っていればスクリプトなんか用意しなくてもSQL Server Management Studioだけでできちゃいますね。

-IT, PowerShell, Windows, Windows Server 2016, Windows Server 2019, WSUS
-, , ,

Copyright© Live Free , 2020 All Rights Reserved.