嗨,Scripting Guy!

Hey,Scripting Guy!

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

今天的問題:如何使用指令碼來變更法律警告訊息?


如何使用指令碼來變更法律警告訊息?

嗨,Scripting Guy!如何在電腦上使用指令碼來變更法律警告訊息?

-- RB

RB,您好。正如您可能知道的,當您按下 Ctrl-Alt-Delete 登入 Windows 時,通常會出現登入對話方塊。您在方塊中輸入使用者名稱、網域與密碼,按一下 [確定],然後繼續。

不論如何,當您按下 Ctrl-Alt-Delete 之後,並在出現登入對話方塊之前,Windows 包含了顯示法律訊息對話方塊的條款。這給您一個機會來告知使用者某些法律上不為責任擔保之聲明。如果使用者按一下 [確定] 然後執行登入,則表示他們同意遵守在免責聲明中指定的各項規則與規定。其次,那至少賦予你某種法律保護,不受「惡作劇」傷害—使用者可能在登入您電腦時所做的惡作劇。

通常,法律警告對話方塊的標題與訊息文字是用「群組原則」所控制的;那可輕易地將警告訊息套用至您網域中的每台電腦。就另一方面而言,您可能不想使用「群組原則」;或無法使用「群組原則」 (畢竟,「群組原則」只在執行 Active Directory 時才運作);或者您可能想在不同電腦上使用不同的訊息。在這些狀況下,指令碼可能正如博士所需,一字不差。

嗯,當然,假設博士是 Scripto 博士。

如其結果所示,LegalNoticeCaptionLegalNoticeText 是在登錄中的 HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon 部分中發現的一對登錄值。若要啟動電腦中的法律警告訊息,您只要設定那兩個項目的值即可。而您可以使用類似下列的指令碼來處理:

Const HKEY_LOCAL_MACHINE = &H80000002
strComputer = "."
 
Set objReg=GetObject("winmgmts:\\" & strComputer & "\root\default:StdRegProv")
 
strKeyPath = "SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon"
strValueName = "LegalNoticeCaption"
strValue = "Fabrikam, Inc. Legal Notice"
objReg.SetStringValue HKEY_LOCAL_MACHINE,strKeyPath,strValueName,strValue
 
strKeyPath = "SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon"
strValueName = "LegalNoticeText"
strValue = "By logging on to this computer you agree to abide by the "
strValue = strValue & "computer usage rules and regulations of Fabrikam, Inc."
strValue = strValue & vbCrLf & vbCrLf
strValue = strValue & "For more information, phone (425)-555-1289."
objReg.SetStringValue HKEY_LOCAL_MACHINE,strKeyPath,strValueName,strValue

上述的指令碼設定警告訊息對話方塊的標題 (LegalNoticeCaption) 為 Fabrikam, Inc. Legal Notice。然後會將實際訊息本身 (LegalNoticeText) 設定為:

登入本電腦表示您同意遵守電腦使用規則及 Fabrikam, Inc 的規定。

如需詳細資訊,請電 (425)-555-1289。

您可能在指令碼中注意到我們使用數行程式碼來設定訊息。那並不是必要的作法;我們可以使用橫跨好幾個螢幕的不規則程式碼行來取代。讀取和修改像那樣的程式碼並不容易,因此,我們以幾個步驟來設定訊息,而不是以一個大步驟來設定。一開始,我們以下列程式碼行來設定名為 strValue 的變數值:

strValue = "By logging on to this computer you agree to abide by the "

現在,請看一下指令碼中的下一行程式碼:

strValue = strValue & "computer usage rules and regulations of Fabrikam, Inc."

如您所見,我們把 strValue 指定為 strValue 現有的值 (經由登入本電腦,您同意接受)「加上」以下:電腦使用規則與 Fabrikam, Inc 的規定。strValue 變數如今會等於:

登入本電腦表示您同意遵守電腦使用規則及 Fabrikam, Inc 的規定。

然後我們附加了一些歸位換行組 (使用 VBScript 常數 vbCrLf) 然後加上最後一行的訊息。現在整個訊息是存放在變數 strName 中,我們已準備好呼叫 SetStringValue 方法,並將這個新的值寫入登錄中。

現在,如果您改變心意並決定最後不要使用警告訊息的話,該怎麼做?如果是這樣,那只要使用指令碼並同時設定 LegalNoticeCaption 與 LegalNoticeText 為空字串即可。因此:

Const HKEY_LOCAL_MACHINE = &H80000002
strComputer = "."
 
Set objReg=GetObject("winmgmts:\\" & strComputer & "\root\default:StdRegProv")
 
strKeyPath = "SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon"
strValueName = "LegalNoticeCaption"
strValue = ""
objReg.SetStringValue HKEY_LOCAL_MACHINE,strKeyPath,strValueName,strValue
 
strKeyPath = "SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon"
strValueName = "LegalNoticeText"
strValue = ""
objReg.SetStringValue HKEY_LOCAL_MACHINE,strKeyPath,strValueName,strValue

順便一提,如果您有興趣多學一些用指令碼來操作登錄值的話,請進入網路廣播 Things the Scripting Guys Never Told You 中註冊,這是 2005 年 1 月 27 日的「指令碼週 2」的部分。我們竭誠地歡迎您!


如需詳細資訊

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

 

回到頁首 回到頁首