none
レジストリ(HKLM)によるプロキシ設定が自動で反映されない RRS feed

  • 質問

  • スタートアップスクリプトから起動させるプログラムをプロキシを経由したアクセスにさせるために
    systemユーザが使うプロキシを設定しようとしています。

    具体的には、グループポリシーで「コンピューター別にプロキシを設定する (ユーザー別ではなく)」の設定をした後に、以下のレジストリを設定しています。

    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings
    ProxyEnable
    ProxyServer

    gpupdate後クライアントのレジストリエディタを確認する限りは正常に反映されている様に見えますが、実際にはインターネットのプロパティをドメイン管理者で開き、プロキシ設定を一度参照しないとプロキシ経由のアクセスになりません。


    ちなみに次のサイトにあるスクリプトを実行しても状況は変わりませんでした。

    https://blue-red.ddo.jp/~ao/wiki/wiki.cgi?page=Windows%A4%C7%A5%D0%A5%C3%A5%C1%A4%C7%A5%D7%A5%ED%A5%AD%A5%B7%A4%F2%C0%DA%A4%EA%C2%D8%A4%A8%A4%EB

    どうにかしてクライアントでの手作業なく自動でプロキシ経由のアクセスにすることは可能でしょうか?
    ご教示お願い致します。

    クライアントはWindows10proです。







    • 編集済み batoga 2020年11月26日 6:50
    2020年11月26日 5:04

回答

  • 自動で反映する方法を発見しましたので共有します。

    1.1台だけ手動で反映させます
    2.反映したPCの「HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings\Connections」にある「DefaultConnectionSettings」のバイナリ値をメモ
    3.上記のレジストリをグループポリシーで対象OUに適用

    この方法で自動で反映させることができました。
    みなさん情報のご提供ありがとうございました。


    • 回答としてマーク batoga 2020年12月16日 6:46
    • 編集済み batoga 2020年12月16日 6:47
    2020年12月16日 6:46

すべての返信

  • こんにちは。フォーラムオペレーターのFanです。
    フォーラムにご投稿くださいましてありがとうございます。
    レジストリ(HKLM)によるプロキシ設定が自動で反映されないことについて、
    ご存知の方おりましたら、ご意見を共有頂ければ本当に幸いです.

    どうぞよろしくお願いいたします。
    Fan

    Please remember to mark the replies as an answers if they help. If you have feedback for TechNet Subscriber Support, contact tnmff@microsoft.com

    2020年11月30日 5:44
    モデレータ
  • スタートアップのスクリプト内でNETSH使ってProxy設定してみてもだめでしょうか。
    netsh winhttp import proxy source=ie
    2020年11月30日 6:40
  • ご返信ありがとうございます。
    「netsh winhttp import proxy source=ie」をスタートアップスクリプトで
    実行してみたのですがダメでした。

    インターネットのプロパティからプロキシのの設定を参照したら反映されるので
    winhttpではなくwininetなのかもしれません。

    2020年11月30日 10:47
  • 以下のスレッドと同じ件の問題と言う理解で返信させて頂きます。

    https://social.technet.microsoft.com/Forums/ja-JP/c918f574-f9e3-427c-9c76-7bb230a61929/ad123981247312479125401248812450124831250312473124631252212503?forum=activedirectoryja

     

    該当のレジストリが設定されていても反映されない(手動での操作が必要)との事であれば、プログラムは該当のレジストリを直接参照している訳では無いのでしょう。

     

    以前のスレッドで案内させて頂いたサイトにもある通り、プログラムがプロキシ設定を利用するパターンは様々あるので、まずはプログラムがどの様なプロキシ設定を利用しているのか推測or把握するのがよいかと思います。

     

    スタートアップスクリプトとの事なので、一番可能性が高いのは winhttp プロキシだと思われます。既に試されたとの事ですが、netsh winhttp import proxy source=ie コマンドは実行したユーザーのプロキシを winhttp プロキシにインポートするコマンドなので、スタートアップスクリプトで実行しても意図した通りプロキシは設定できないでしょう。

    winhttp プロキシをスタートアップスクリプトで設定するなら、以下のサイトで解説されている netsh winhttp set proxy "Proxy Server" コマンドを使ってみて下さい。

    https://support.microsoft.com/ja-jp/help/4494447/use-group-policy-to-apply-winhttp-proxy-settings-to-clients

    2020年11月30日 11:22
  • Lapivyさん前スレッドに引き続きご返信ありがとうございます。

    ご教示頂いた方法を試してみましたが、反映されませんでした。

    前スレッドで頂いたサイトは凄く勉強になりました。読ませて頂いて考えたところ、サービスなので
    winhttpなのかなと思っていたのですが、インターネットのプロパティがトリガーで反映するところから
    IEが見ているwininetなのかなと思ったりして迷走しています。

    他に少しでも可能性がある方法があれば試してみたいので引き続きご教示頂けると嬉しいです。

    2020年11月30日 13:28
  • チャブーンです。

    この件ですが、レジストリだけ変更してもダメで、InternetSetOption関数を使ったプログラミンが必要になります。PowerShellで書くかこのために作成されたexeファイルを使うか、といった対応になります。以下の過去ログとそのリンク先を漏れなく見てください。

    グループポリシーでIEのプロキシ除外設定が反映されない (microsoft.com)


    フォーラムは有償サポートとは異なる「コミュニティ」です。フォーラムでご質問頂くにあたっての注意点 をご一読のうえ、お楽しみください。

    2020年11月30日 13:47
  • チャブーンさんご返信ありがとうございます。

    教えて頂いた情報を確認し、失礼がない様に検証を重ねていました。

    InternetSetOption関数については質問の中にお書きしていますが、リンク先にあるスクリプトを実行しても接続できませんでしたが、チャブーンさんのアドバイスを信じてイロイロと試した結果、以下のPowerSellスクリプトを手動でドメイン管理者で実行すると反映されることがわかりました。

    ---------------------------------------------------------------------
    function Reload-InternetOptions
    {
      $signature = @'
    [DllImport("wininet.dll", SetLastError = true, CharSet=CharSet.Auto)]
    public static extern bool InternetSetOption(IntPtr hInternet, int dwOption, IntPtr lpBuffer, int dwBufferLength);
    '@
      $interopHelper = Add-Type -MemberDefinition $signature -Name MyInteropHelper -PassThru

      $INTERNET_OPTION_SETTINGS_CHANGED = 39
      $INTERNET_OPTION_REFRESH = 37

      $result1 = $interopHelper::InternetSetOption(0, $INTERNET_OPTION_SETTINGS_CHANGED, 0, 0)
      $result2 = $interopHelper::InternetSetOption(0, $INTERNET_OPTION_REFRESH, 0, 0)

      $result1 -and $result2
    }

    Reload-InternetOptions
    ---------------------------------------------------------------------

    ただ、スタートアップスクリプトでは上手くいかず、せっかく登録したレジストリすらもなぜか消えてしまいます。
    HKLMだからかSYSTEMユーザではなくドメイン管理者で実行する必要がある様です。

    自動反映をあきらめて、せめてPsExec.exeを使って遠隔からのコマンド実行で反映させたいと思い、ましたが、これも上手く反映できません。

    この件についてまとめると以下になります。
    ----------------------------------------------
    ■ 反映成功した方法
    該当PCにドメインユーザでログインし、コマンドプロンプトをドメイン管理者で実行し、以下のコマンドを実行。

    > PowerShell.exe -file "C:\Reload-InternetOptions.ps1"
    True

    ----------------------------------------------

    ■ 反映失敗した方法
    ADサーバにドメイン管理者でログインし、コマンドプロンプトをドメイン管理者で実行し、以下のコマンドを実行


    > PsExec.exe -u <ドメイン>\Administrator -p <パスワード>  \\<ホスト名> PowerShell.exe -file "C:\Reload-InternetOptions.ps1"

    PsExec v2.2 - Execute processes remotely
    Copyright (C) 2001-2016 Mark Russinovich
    Sysinternals - www.sysinternals.com

    True
    PowerShell.exe exited on <ホスト名> with error code 0.

    ----------------------------------------------

    解決に向かうためのヒントがあればご教示ください。
    よろしくお願い致します。









    • 編集済み batoga 2020年12月5日 15:51
    2020年12月5日 15:33
  • 自動で反映する方法を発見しましたので共有します。

    1.1台だけ手動で反映させます
    2.反映したPCの「HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings\Connections」にある「DefaultConnectionSettings」のバイナリ値をメモ
    3.上記のレジストリをグループポリシーで対象OUに適用

    この方法で自動で反映させることができました。
    みなさん情報のご提供ありがとうございました。


    • 回答としてマーク batoga 2020年12月16日 6:46
    • 編集済み batoga 2020年12月16日 6:47
    2020年12月16日 6:46