トップ回答者
レジストリ(HKLM)によるプロキシ設定が自動で反映されない

質問
-
スタートアップスクリプトから起動させるプログラムをプロキシを経由したアクセスにさせるために
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
回答
-
自動で反映する方法を発見しましたので共有します。
1.1台だけ手動で反映させます
2.反映したPCの「HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings\Connections」にある「DefaultConnectionSettings」のバイナリ値をメモ
3.上記のレジストリをグループポリシーで対象OUに適用
この方法で自動で反映させることができました。
みなさん情報のご提供ありがとうございました。
すべての返信
-
こんにちは。フォーラムオペレーターのFanです。
フォーラムにご投稿くださいましてありがとうございます。
レジストリ(HKLM)によるプロキシ設定が自動で反映されないことについて、
ご存知の方おりましたら、ご意見を共有頂ければ本当に幸いです.
どうぞよろしくお願いいたします。
FanPlease remember to mark the replies as an answers if they help. If you have feedback for TechNet Subscriber Support, contact tnmff@microsoft.com
-
以下のスレッドと同じ件の問題と言う理解で返信させて頂きます。
該当のレジストリが設定されていても反映されない(手動での操作が必要)との事であれば、プログラムは該当のレジストリを直接参照している訳では無いのでしょう。
以前のスレッドで案内させて頂いたサイトにもある通り、プログラムがプロキシ設定を利用するパターンは様々あるので、まずはプログラムがどの様なプロキシ設定を利用しているのか推測or把握するのがよいかと思います。
スタートアップスクリプトとの事なので、一番可能性が高いのは winhttp プロキシだと思われます。既に試されたとの事ですが、netsh winhttp import proxy source=ie コマンドは実行したユーザーのプロキシを winhttp プロキシにインポートするコマンドなので、スタートアップスクリプトで実行しても意図した通りプロキシは設定できないでしょう。
winhttp プロキシをスタートアップスクリプトで設定するなら、以下のサイトで解説されている netsh winhttp set proxy "Proxy Server" コマンドを使ってみて下さい。
-
チャブーンです。
この件ですが、レジストリだけ変更してもダメで、InternetSetOption関数を使ったプログラミンが必要になります。PowerShellで書くかこのために作成されたexeファイルを使うか、といった対応になります。以下の過去ログとそのリンク先を漏れなく見てください。
グループポリシーでIEのプロキシ除外設定が反映されない (microsoft.com)
フォーラムは有償サポートとは異なる「コミュニティ」です。フォーラムでご質問頂くにあたっての注意点 をご一読のうえ、お楽しみください。
-
チャブーンさんご返信ありがとうございます。
■ 反映失敗した方法
教えて頂いた情報を確認し、失礼がない様に検証を重ねていました。
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 v2.2 - Execute processes remotely
> PsExec.exe -u <ドメイン>\Administrator -p <パスワード> \\<ホスト名> PowerShell.exe -file "C:\Reload-InternetOptions.ps1"
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
-
自動で反映する方法を発見しましたので共有します。
1.1台だけ手動で反映させます
2.反映したPCの「HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings\Connections」にある「DefaultConnectionSettings」のバイナリ値をメモ
3.上記のレジストリをグループポリシーで対象OUに適用
この方法で自動で反映させることができました。
みなさん情報のご提供ありがとうございました。