嗨,Scripting Guy!

嗨,Scripting Guy!

歡迎使用 TechNet 專欄,Microsoft Scripting Guys 會在此為您解答有關系統管理指令碼的常見問題。您有關於系統管理指令碼方面的問題嗎?請將電子郵件傳送到 scripter@microsoft.com。我們無法保證能夠逐一回答每個問題,不過我們會盡力而為。

今天的問題:如何在使用 Proxy 伺服器跟不使用 Proxy 伺服器之間轉換?


如何在使用 Proxy 伺服器跟不使用 Proxy 伺服器之間轉換?

嗨,Scripting Guy!我們在工作時需要使用 Proxy 伺服器連接到 Internet;然而,當我把膝上型電腦帶回家工作時,並不需要使用 Proxy 伺服器。我知道可以使用 [控制台] 中的 [網際網路選項] 來更換是否要使用 Proxy 伺服器,但是有沒有辦法可以用指令碼來交互使用這兩者?

-- EA

EA,您好。我們就祈禱有方法可以使用指令碼這樣做;如果沒有,這個專欄就會比平常更簡短了 (當然,很多人可能會爭論那也不算是件壞事)。如果您不太確定 EA 是在說什麼,其實他講的是下面這個對話方塊中,底部的那組選項 (標示為 [Proxy 伺服器] 區段內的選項):

Proxy 伺服器設定


對了,這也是十分常見的實例:許多公司都在他們的內部網路上使用 Proxy 伺服器,但是只有少數的網際網路服務提供者會將 Proxy 伺服器用於他們的消費者網路。如果您在家跟辦公室裡都是使用膝上型電腦,會常發現到自己在使用 Proxy 伺服器與不使用 Proxy 伺服器之間切換。

那要如何使用指令碼來進行呢?結果是有 3 個登錄值在控制這些設定 (沒錯,雖然從對話方塊看來,好像有 4個設定需要控制。別擔心,我們會解釋這全部是如何運作的)。這 3 個登錄值 (位於登錄中的 HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings 機碼內) 包含:

  • ProxyEnable。此一 DWORD 值會設定 [在您的區域網路使用 Proxy 伺服器] 核取方塊。如果 ProxyEnable 設為 1,那麼就會啟用 Proxy 伺服器的使用 (例如核取方塊被勾選起來)。如果 ProxyEnable 設為 0,那麼 Internet Explorer 將不會使用 Proxy 伺服器。
  • ProxyServer。此一 REG_SZ (字串) 值是用來設定 [位址] 與 [連接埠] 兩種設定。若要進行設定,Proxy 伺服器位址與連接埠必須要以此格式呈現:address:port。也就是說,將 myproxy 設定為 Proxy 伺服器的位址,並將連接埠 80 設成指派此值至 ProxyServer 的連接埠:myproxy:80

    順便提一下,如果停用 Proxy 伺服器的使用,就不需要清除此登錄值;此值只有在 Internet Explorer 使用 Proxy 伺服器時才會用到。這對指令碼作者比較有利:如要停用 Proxy 伺服器,只需要將 ProxyEnable 的值設為 0;您可以將 ProxyServer 跟 ProxyOveride 保持原狀。

  • ProxyOverride。此一 REG_SZ 值會設定 [近端網址不使用 Proxy] 核取方塊。如要指示 Internet Explorer 在近端網址上不要使用 Proxy 伺服器,請將此值設為 。如要指示 Internet Explorer 在近端網路上使用 Proxy 伺服器,請將 ProxyOverride 值設為 127.0.0.1
    這麼說來,您的 ProxyOverride 值有可能並非 。所以在編寫指令碼之前,您最好使用 Regedit 來確認在啟用和停用 [近端網路不使用 Proxy] 時的值。

全都了解了嗎?現在知道需要設定的登錄值之後 (還有應該如何設定它們),剩下的就跟撰寫 WMI 指令碼來啟用 Proxy 伺服器的 。指定 Proxy 伺服器位址與連接埠,然後告知 Internet Explorer 不要在近端網路上使用 Proxy 一樣簡單:

Const HKEY_CURRENT_USER = &H80000001
strComputer = "."
Set objRegistry = GetObject("winmgmts:\\" & strComputer & "\root\default:StdRegProv")
 
strKeyPath = "SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings"
strValueName = "ProxyEnable"
dwValue = 1
objRegistry.SetDWORDValue HKEY_CURRENT_USER, strKeyPath, strValueName, dwValue
strValueName = "ProxyServer"
strValue = "svcproxy:80"
objRegistry.SetStringValue HKEY_CURRENT_USER, strKeyPath, strValueName, strValue
strValueName = "ProxyOverride"
strValue = "<local>"
objRegistry.SetStringValue HKEY_CURRENT_USER, strKeyPath, strValueName, strValue

指令碼一開始會定義一個名為 HKEY_CURRENT_USER 的常數,並且將值設為 &H80000001;我們稍後會使用此常數,告訴指令碼我們想要使用登錄中的 HKCU 部分。接著會連接到 WMI 服務,這一次是繫結至 root\default 命名空間與 StdRegProv 類別 (用來讀取與寫入登錄值的 WMI 類別)。

在連接完成之後,接下來會將登錄路徑 (SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings) 指派到一個名為 strKeyPath 的變數;然後將登錄值 (ProxyEnable) 與設定值 (1) 指派到 strValueName 與 dwValue 變數。現在呼叫 SetDWORDValue 方法與將 ProxyEnable 值變更為 1 所需的全部資訊我們都有了:

objRegistry.SetDWORDValue HKEY_CURRENT_USER, strKeyPath, strValueName, dwValue

之後我們對 ProxyServer 與 ProxyOverride 重複相同的步驟。不過要注意,此兩種登錄值皆有 REG_SZ 資料型別;因此我們改用 SetStringValue 方法來取代 SetDWORDValue (如果您完全不了解我們在提到 SetDWORDValue 與 SetStringValue 這類項目時說的是什麼,請參閱《Microsoft Windows 2000 Scripting Guide》中的<Registry> (英文) 一章)。

如先前提過的,停用 Proxy 伺服器要簡單得多:只要將 ProxyEnable 的值設為 0 就可以了:

Const HKEY_CURRENT_USER = &H80000001
strComputer = "."
Set objRegistry = GetObject("winmgmts:\\" & strComputer & "\root\default:StdRegProv")
 
strKeyPath = "SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings"
strValueName = "ProxyEnable"
dwValue = 0
objRegistry.SetDWORDValue HKEY_CURRENT_USER, strKeyPath, strValueName, dwValue

事實上,在您的 Proxy 設定全都設定好之後 (也就是說,在初步將值指派給 ProxyServer 與 ProxyOverride 之後), 就可以藉由設定 ProxyEnable 碼,在使用 Proxy 伺服器與不使用 Proxy 伺服器之間切換。換句話說,在有 Proxy 位址與連接埠之後,以及在決定好要如何設定 ProxyOverride 值之後,唯一需要做的只是執行此指令碼來重新啟用 Proxy 伺服器的使用:

Const HKEY_CURRENT_USER = &H80000001
strComputer = "."
Set objRegistry = GetObject("winmgmts:\\" & strComputer & "\root\default:StdRegProv")
 
strKeyPath = "SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings"
strValueName = "ProxyEnable"
dwValue = 1
objRegistry.SetDWORDValue HKEY_CURRENT_USER, strKeyPath, strValueName, dwValue

如要停用 Proxy 伺服器,只要將 ProxyEnable 的值設為 0 即可,就這樣簡單。


如需詳細資訊

查看嗨,Scripting Guy!- 過往文件

 

回到頁首 回到頁首