Windows10のプロキシ経由でWindows UpdateができないときのWinHTTPコマンド

インターネットはできるのにWindows Updateができない

Windows 10 Enterprise 2019 LTSC(v1809)のPCをセットアップしていて、何度再起動してチャレンジしてもWindows Updateに失敗します。会社のPCでインターネットは社内のプロキシ経由でインターネットに接続しています。その環境下で1台のWindows10のPCだけ、以下の現象が起こりました。

ネットワークの設定は問題なく、LANとインターネットは正常に使えるのに、なぜかWindows Updateだけできませんでした。Windows 10 Enterprise 2016 LTSB(v1607)では「Internet Explorer 11のプロキシ設定」または[設定]-[ネットワークとインターネット]-[プロキシ]の設定をするだけで、インターネットと共にWindows Updateもできています。

おなじ回線環境で同じ設定なのにLTSCではなぜかWindows Updateができません。

WinHTTP Proxyの設定が必要だった

Link

エラー - Office.com - Microsoft サポート

https://support.microsoft.com/ja-jp/help/2894304

上記のページによると、以下の場合にこのような現象が起こるそうです。

この場合、プロキシ経由でWindows Updateを行うにはWinHTTPのプロキシ設定が必要のようで、特定のWindowsのバージョンでこの症状が出るわけではなく、今回はたまたまLTSCでこの症状が出ただけで、Windowsのバージョンは関係ないようです。

エラー番号で切り分けできる?

そういう環境かどうかをどうやって調べればいいのかよくわかりませんが、WinHTTPプロキシの設定が必要な場合、Windows Update失敗時に以下のエラー番号が表示されるそうです。

WinHTTP Proxyを設定するコマンド

プロキシ経由でWindows UpdateができるようにするためにはWinHTTPプロキシの設定が必要で、設定するためにはコマンドプロンプトからNetshコマンドの実行で設定します。

現在のWinHTTPプロキシ設定内容を確認するコマンド

netsh winhttp show proxy

IEのプロキシサーバーをWinHTTPプロキシに使用するコマンド

netsh winhttp import proxy source=ie

手動でWinHTTPプロキシに使用するサーバーを指定するときのコマンド

netsh winhttp set proxy proxy-server="myProxyServer:8080" bypass-list="<local>;*.microsoft.com

WinHTTPプロキシ設定内容をリセットするコマンド

以下のコマンドで、WinHTTPプロキシを設定のない元の状態(既定の直接アクセス)にリセット(初期化)できます。

netsh winhttp reset proxy

IEのプロキシ設定でWindows Updateができた

Internet Explorer 11に設定しているプロキシサーバーの設定を使用するWinHTTP Proxyのコマンドを実行したところ、正常にWindows Updateをすることができました。

設定用バッチファイル

簡単に設定したいときに使えるバッチファイルのソース例です。メモ帳などのテキストエディタに貼り付け、WinHttpProxy.batなど適当に保存して使用してください。実行時は管理者として実行してください。

@echo off

:START_MENU
echo.
echo =======================
edho  WinHTTPプロキシの設定
echo =======================
echo [1] 現在の設定を確認
echo [2] IEのプロキシ設定を使う
echo [3] プロキシサーバーを指定する
echo [4] 設定をリセットする
echo [5] 終了
echo
set /p MODE="実行した番号を選択してください:"
echo.

if %MODE% equ 1 (
    goto SHOW
)else if %MODE% equ 2 (
    goto IE
)else if %MODE% equ 3 (
    goto SERVER
)else if %MODE% equ 4 (
    goto RESET
)else if %MODE% equ 5 (
    goto EXIT
)
cls
goto START_MENU

:SHOW
netsh winhttp show proxy
goto START_MENU

:IE
netsh winhttp import proxy source=ie
goto START_MENU

:SERVER
echo "プロキシサーバーを入力してください。"
set /p SV="(例 myProxyServer:8080):"
netsh winhttp set proxy proxy-server="%SV%" bypass-list="<local>;*.microsoft.com
goto START_MENU

:RESET
netsh winhttp reset proxy
goto START_MENU

:EXIT
exit
PAGETOP