2018/02/19

昔 SCCM の SUP だった WSUS の「まだ報告されていません」問題の解消 (Windows Server 2016 の場合)

Windows Server 2016 の Windows Server Update Services (WSUS) で、クライアントのレポートレベル(ClientReportingLevel)の設定を None (SCCM 用のなし) から All(WSUS の既定)に戻す方法のメモ。 CodePlex (現在は Archive) の WSUS_Reporting_Level.exe と同じことを PowerShell の Get-WSUSServer で行う方法。Windows Server 2012/2012 R2 にも Get-WSUSServer あるので、同じ方法でいけると思う(未確認)。

注:普通の運用環境で発生するかもしれない「まだ報告されていません」問題の解決策ではありません。SCCM を評価して、その後、通常の WSUS に戻したときに遭遇するかもしれない問題の、SUSDB とコンテンツを維持したまま解決する方法です。

WSUS でクライアントの状態レポートが「まだ報告されていません(Not yet reported)」(または長期間報告されていない)のまま変わらない問題が発生する 1 つのケースとして、過去に(一時的に)評価目的とかで System Center Configuration Manager (SCCM) のソフトウェアの更新ポイント(Software Update Point:SUP)として構成したことがあり、その後、SCCM の環境を削除したことが原因の場合があります。

そんな環境を 先月作ってしまい、どうやって回復しようものか(データベースやコンテンツは残したい)、悩んでいましたが、試行錯誤の末、ようやく解消できました。


こうなった原因は、SCCM でソフトウェアの更新ポイントの同期設定の「WSUSレポートイベント」の設定で、「WSUSレポートイベントを作成しない」に設定されている状態のまま、ソフトウェアの更新ポイントの役割を削除したことです。既に SCCM のサイトも削除(SCCM を完全にアンインストール)してしまいました。

以下の 2008 年に書かれた公式ブログにあるように、昔からのあるある問題です。SCCM の環境が残っているなら、もう一度 SUP として登録して、「WSUS レポート イベント」の設定を「すうべての WSUS レポート イベントを作成する」に戻してから、SUP を削除すれば済む話なのですが、そうでない場合は少し厄介です。

SUS Blog > WSUS clients install updates properly but don’t send any status reports back to the server (November 12, 2008)
[URL] https://blogs.technet.microsoft.com/sus/2008/11/12/wsus-clients-install-updates-properly-but-dont-send-any-status-reports-back-to-the-server/

こちらの TechNet Wiki の「7. Conflicts with System Center Configuration Manager」のケース。

Troubleshooting WSUS Agents that Are Not Reporting to the WSUS Server 

[URL] https://social.technet.microsoft.com/wiki/contents/articles/506.troubleshooting-wsus-agents-that-are-not-reporting-to-the-wsus-server.aspx

上記ブログにも書いてありますが、WSUS 側の ClientReportingLevel が None になっているのが問題で、All(2)に戻してあげれば直るはず。でも、上記ブログと TechNet WiKi で紹介されている WSUS_Reporting_Level.exe ツールは、WSUS 3.0 (Windows Server 2008/2008 R2) 向けに書かれたもので、Windows Server 2016 (2012 以降は WSUS 4.0 相当)では動きません。

(参考まで。WSUS_Reporting_Level.exe は現在、 CodePlex Archive にあります。WSUS で検索してダウンロードし、Releases\0 の中身のファイル名を WSUS_Reporting_Level.zip とかにすると .exe を取り出せます。)


さて、さて、さぁて。SCCM をもう一度インストールするのは面倒なのでやりたくないし,
WSUS の再構築(SUSDB 含め)も色々消えてしまって避けたいし(SUSDB を維持しながらの役割の削除/追加では解消しませんでした)...

と思っていたところ、Windows Server 2016 なら WSUS 用の Get-WSUSServer コマンドレット(UpdateServices モジュール)でできました。

$MyServer = Get-WSUSServer
$MyConfig = $MyServer.GetConfiguration()
$MyConfig.ClientReportingLevel   
 (※ 出力結果が None なら次の手順に進んで All に変更。All ならこの問題とは関係ないので別の原因を考えましょう!)

$MyConfig.ClientReportingLevel = 2
$MyConfig.ClientReportingLevel
$MyConfig.Save()

確認!
((Get-WSUSServer).GetConfiguration()).ClientReportingLevel


クライアント側で更新チェックして(念のため、wuauclt /ReportNow とかも)しばらくすると(数分?)...

問題解決!

おまけ

このケースではない、その他の WSUS や SUSDB 関連の問題は、こちらのコミュニティで公開されているスクリプトが効果的なようです(ご利用は自己責任で)。

WSUS Automated Maintenance (Formerly Adamj Clean-WSUS)
[URL] https://community.spiceworks.com/scripts/show/2998-wsus-automated-maintenance-formerly-adamj-clean-wsus
Windows Server 2016 not reporting to WSUS
[URL] https://social.technet.microsoft.com/Forums/en-US/0a250530-d7f2-45b9-9b50-d1b235fe4cfa/windows-server-2016-not-reporting-to-wsus?forum=winserverwsus
 
また、Windows 10 と Windows Server 2016 からは、wuauclt /detectnow は廃止されているので注意。代わりに...

usoclient startscan
または
PowerShell.exe (New-Object -ComObject Microsoft.Update.AutoUpdate).DetectNow()

0 件のコメント: