プロキシ設定をクリアするスクリプト

 私の職場ではインターネットへ出るのにProxyサーバーを使用しなければ出ることはできません。しかしイントラにあるサーバーについては,当然ながらプロキシなしで接続する必要があります。そういう時には,自動構成スクリプトを作って,ブラウザはそれを解釈してネット接続するようにします。

 

そしてそれをさらに簡単にするためには,wpadというサーバーにwpad.datという名前で自動構成スクリプトを置けば,「設定を自動的に検出する」にチェックを入れるだけで,自動構成スクリプトを読み込んでくれるようになります。

実際にはwpadというサーバーを新たに立てる必要はなく,DNSで名前が解決できればいいので,DNSにwpadというレコードを登録するのと,DNSサフィックスをちゃんと指定して,単に wpad という名前でnslookupした時にちゃんと値が返るようにしなければなりません。

しかし,これらの設定をちゃんとやっても,なんかうまくプロキシ設定を読んでくれないことがあります。これまでそれが不思議でなりませんでした。

いろいろ調べてみると,DefaultConnectionSettingsとSavedLegacySettingsというレジストリエントリが関係していることがわかりってきました。IEはインターネット オプションのダイアログでプロキシ関係の設定がされた場合や,このエントリがない状態で最初にIEを起動する際に,このエントリを作ります。そしてこの中には,自動的に検出した自動構成スクリプトの場所を完全修飾の形式で,エントリのデータに保存するのです。そして保存されている自動構成スクリプトの場所が現実にそぐわなくなったような場合に,「設定を自動的に検出する」にチェックが入っていても,再度自動構成スクリプトの場所を自動的に検出しないみたいなんです。このエントリに余分な情報が入っているがために,うまくつながらない状態が修復できないのです。

だから,えいっとこのエントリをけしちゃおうというのが,次のスクリプトです。スクリプトを実行すると,DefaultConnectionSettingsとSavedLegacySettingsというレジストリエントリを消しちゃいます。IEは次に起動するときにこのエントリを勝手に作るので,消しちゃっても大丈夫です。

Set WshShell=WScript.CreateObject("WScript.Shell")
 
Const KEYNAME="\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings\Connections\"
CONST KEY1 = "DefaultConnectionSettings"
Const KEY2 = "SavedLegacySettings"
 
DeleteValue("HKLM" & KEYNAME & KEY1)
DeleteValue("HKLM" & KEYNAME & KEY2)
DeleteValue("HKCU" & KEYNAME & KEY1)
DeleteValue("HKCU" & KEYNAME & KEY2)
WScript.Echo "プロキシ設定をクリアしました"
 
Sub DeleteValue(AReg)
    Dim sValue
 
    On Error Resume Next
    sValue = WshShell.RegRead(AReg)
    If Err <> 0 Then
        Err.Clear
    Else
        WshShell.RegDelete AReg
    End If
End Sub

 

トラックバック


URL から "-MoIyadayo" を削除してトラックバックを送信してください。
トラックバックは承認後に表示されます。