Windows10のプロキシ経由でWindows UpdateができないときのWinHTTPコマンド
目次
インターネットはできるのにWindows Updateができない
Windows 10 Enterprise 2019 LTSC(v1809)のPCをセットアップしていて、何度再起動してチャレンジしてもWindows Updateに失敗します。会社のPCでインターネットは社内のプロキシ経由でインターネットに接続しています。その環境下で1台のWindows10のPCだけ、以下の現象が起こりました。
- LANに接続できている
- インターネットもできる
- Windows Updateだけエラーでできない
ネットワークの設定は問題なく、LANとインターネットは正常に使えるのに、なぜかWindows Updateだけできませんでした。Windows 10 Enterprise 2016 LTSB(v1607)では「Internet Explorer 11のプロキシ設定」または[設定]-[ネットワークとインターネット]-[プロキシ]の設定をするだけで、インターネットと共にWindows Updateもできています。
おなじ回線環境で同じ設定なのにLTSCではなぜかWindows Updateができません。
WinHTTP Proxyの設定が必要だった
上記のページによると、以下の場合にこのような現象が起こるそうです。
- Windows Updateの通信がプロキシ サーバーを使用するように構成されていない
- プロキシサーバーが Windows Update に必要な通信を許可していない
- Windows Update が Internet Explorer のプロキシ設定を適切に参照できない
この場合、プロキシ経由でWindows Updateを行うにはWinHTTPのプロキシ設定が必要のようで、特定のWindowsのバージョンでこの症状が出るわけではなく、今回はたまたまLTSCでこの症状が出ただけで、Windowsのバージョンは関係ないようです。
エラー番号で切り分けできる?
そういう環境かどうかをどうやって調べればいいのかよくわかりませんが、WinHTTPプロキシの設定が必要な場合、Windows Update失敗時に以下のエラー番号が表示されるそうです。
- 0x80240030
- 0x80072efe
- 0x80244022
- 0x80072EFD
- 0x80072EE2
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

