使用VBS更新注册表

问题描述 投票:2回答:2

我正在尝试使用VBScript更新我们PC上的法律标题。到目前为止,我已经能够读取值,但我似乎无法写出任何值。我运行脚本时没有出错,它只是没有改变任何东西。这是我第一次这样做,而且我的经验有限;任何见解将不胜感激:

Dim objShell
Dim strMessage, strWelcome, strWinLogon

' Set the string values
strWelcome = "legalnoticecaption"
strMessage = "did this work"
strWinLogon = "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System\"

' Create the Shell object
Set wshShell = CreateObject("WScript.Shell")

'Display string Values
Wscript.Echo "key to update: " & strWelcome
Wscript.Echo "key value to enter: " & strMessage
Wscript.Echo "Existing key value: " & wshShell.RegRead(strWinLogon & strWelcome)


' the crucial command in this script - rewrite the registry
wshShell.RegWrite strWinLogon & strWelcome, strMessage, "REG_SZ"

' Did it work?
Wscript.Echo "new key value: " & wshShell.RegRead(strWinLogon & strWelcome)

set wshShell = Nothing

注意:这些是目前的测试值。

vbscript registrykey
2个回答
1
投票

你的脚本似乎没有错误。但是,由cscript 28416995.vbs发起的返回下一个错误(其中22 = WshShell.RegWrite行):

28416995.vbs(22,1)WshShell.RegWrite:注册表项“HKLM \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Policies \ System \ legalnoticecaption”中的根目录无效。

它不是无效的root,它类似于访问被拒绝,而是因为写入HKLM需要提升权限(或以管理员身份运行)。

注意:

  • 你应该和LegalNoticeText一起改变LegalNoticeCaption值。
  • HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\注册表项下,两个值也存在。对于这种情况(如果计算机未连接到域或禁用组策略)应该使用下一个脚本。

以管理员身份运行:

option explicit
On Error Goto 0
Dim wshShell
Dim strResult, strMessage, strWelcome, strWinLogon, strWinLog_2, strWinLTxt
strResult=Wscript.ScriptName

' Set the string values
strWinLTxt = "legalnoticetext"
strWelcome = "legalnoticecaption"
strMessage = "did this work"

strWinLogon = "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\"
strWinLog_2 = "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System\"

' Create the Shell object
Set wshShell = CreateObject("WScript.Shell")

'Display string Values
' continue execution if requested registry values not present 
On Error Resume Next
strResult = strResult & vbNewLine & "Existing Caption Policies: " _
  & wshShell.RegRead(strWinLog_2 & strWelcome)
strResult = strResult & vbNewLine & "Existing Text Policies: " _
  & wshShell.RegRead(strWinLog_2 & strWinLTxt)
On Error Goto 0
strResult = strResult & vbNewLine & "Existing Caption Winlogon: " _
  & wshShell.RegRead(strWinLogon & strWelcome)
strResult = strResult & vbNewLine & "Existing Text Winlogon: " _
  & wshShell.RegRead(strWinLogon & strWinLTxt)
strResult = strResult & vbNewLine
strResult = strResult & vbNewLine & "key to update: " & strWelcome
strResult = strResult & vbNewLine & "key value to enter: " & strMessage


' the crucial command in this script - rewrite the registry
wshShell.RegWrite strWinLogon & strWelcome, strMessage, "REG_SZ"
wshShell.RegWrite strWinLogon & strWinLTxt, UCase( strMessage), "REG_SZ"

' Did it work?
strResult = strResult & vbNewLine
strResult = strResult & vbNewLine _
  & "new key Capt. value: " & wshShell.RegRead(strWinLogon & strWelcome)
strResult = strResult & vbNewLine _
  & "new key Text value: " & wshShell.RegRead(strWinLogon & strWinLTxt)
Wscript.Echo strResult 
set wshShell = Nothing

0
投票

对我来说,你的代码运行完美。对于需要详细信息的其他用户,我推荐此站点:http://ss64.com/vb/regread.htmlss64.com/vb/regwrite.html两个链接都详细说明了您创建的过程。

© www.soinside.com 2019 - 2024. All rights reserved.