複数台の管理サーバーを管理していくうえで、サーバー管理を使用するばある程度の構成情報を取得できますが、Windows Updateがどのように構成されているのかを確認することは難しいです。
Powershellでレジストリ情報を参照してWindows Updateの構成情報を取得する方法について記載しています。
重要な更新プログラムを取得する場合は次のコマンドを実行します。
Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update"
実行結果
これだけでは実行結果になにも表示されませんがデータは取得できています。 データ自体がない場合はエラーが発生します。
Get-ItemProperty : パス 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update' が存在しないため検出できません。
発生場所 行:1 文字:1
+ Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Win ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (HKLM:\SOFTWARE\...te\Auto Updatea:String) [Get-ItemProperty], ItemNotFoundException
+ FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetItemPropertyCommand
Windows Updateの有効化状態を取得する場合は次のコマンドを実行します。
Get-ItemProperty "HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate"
実行結果
こちらもこれだけでは実行結果になにも表示されませんがデータは取得できています。 ※未構成の場合は上記と同様のエラーが表示されます。 自動更新オプションを取得する場合は次のコマンドを実行します。
Get-ItemProperty "HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU"
実行結果
こちらもこれだけでは実行結果になにも表示されませんがデータは取得できています。 ※未構成の場合は上記と同様のエラーが表示されます。 それでは、実際に上記のコマンドを使用して必要な値を確認していくためにサブキーを取得して補完していきます。 以下のソースコードでレジストリのサブキーから必要なデータを収集することができます。
$WUAU = Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update"
$WUPol = Get-ItemProperty "HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate"
$WUPolAU = Get-ItemProperty "HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU"
if($WUAU -ne $null){
Switch($WUAU.AUOptions){
0{$WUAUType = "未構成"}
1{$WUAUType = "更新プログラムを確認しない"}
2{$WUAUType = "更新プログラムを確認するが、ダウンロードとインストールを行うかどうかは選択する"}
3{$WUAUType = "更新プログラムをダウンロードするが、インストールを行うかどうかは選択する"}
4{$WUAUType = "更新プログラムを自動的にインストールする(推奨)"}
$null {$WUAUType = "未構成"}
default{$WUAUType = "不明"}
}
Switch($WUAU.UseWUServer){
0{$UseWU = "使わない"}
1{$UseWU = "使う"}
default{$UseWU = "使わない"}
}
}
if($WUPolAU -ne $null){
Switch($WUPolAU.NoAutoUpdate){
0{$NoAU = "有効"}
1{$NoAU = "無効"}
default{$NoAU = "不明"}
}
}else{
$NoAU = "未構成"
}
if($WUPolAU -ne $null){
Switch($WUPolAU.AUOptions){
0{$AUop = "未構成"}
1{$AUop = "自動更新を無効にする"}
2{$AUop = "更新を通知するのみで、自動的なダウンロードまたはインストールを実行しない"}
3{$AUop = "更新を自動的にダウンロードするが、インストールは手動で実行する"}
4{$AUop = "推奨される更新を自動的にダウンロードし、指定した時刻にインストールする"}
$null{$AUop = "未構成"}
default{$AUop = "不明"}
}
}else{
$AUop = "未構成"
}
if($WUPol -ne $null){
$WUServer = $WUPol.WUServer
$WUStatusServer = $WUPol.WUStatusServer
}else{
$WUServer = $WUStatusServer = "未構成"
}
echo 'Auto Update Setting (Local) : ' -Value $WUAU
echo 'WSUS Server : ' -Value $UseWU
echo 'Auto Upadate (WSUS) : ' -Value $NoAU
echo 'Auto Update Setting (WSUS) : ' -Value $AUop
echo 'Windows Update Reference : ' -Value $WUServer
echo 'Windows Update Report : ' -Value $WUStatusServer
BATを作成して実行することで、コマンドを入力しないで取得することも可能です。
※BATとPS1ファイルを同一カレントディレクトリに保存して実行します。
@echo off
echo Windows Update情報を取得しています...
powershell -NoProfile -ExecutionPolicy Unrestricted .\get-windowsupdate.ps1
echo 取得完了
pause >nul
exit
補足
上記はWindows 7/8 等で利用可能なコマンドとなります。
Windows 10では取得の方法が変わります。