Обновить реестр с помощью VBS

Я пытаюсь обновить юридическую подпись на наших компьютерах, используя скрипт VBS. До сих пор я был в состоянии читать значения, но я не могу заставить его писать какие-либо значения. Я не получаю ошибку, когда запускаю скрипт, он просто ничего не меняет. Я делаю это впервые, и у меня ограниченный опыт; Любое понимание будет оценено:

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

ПРИМЕЧАНИЕ: это тестовые значения на данный момент.

3 ответа

Ваш скрипт, кажется, без ошибок. Тем не менее, запущен cscript 28416995.vbs возвращает следующую ошибку (где 22 = WshShell.RegWrite линия):

28416995.vbs (22, 1) WshShell.RegWrite: недопустимый корень в разделе реестра "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System\legalnoticecaption".

Это не недействительный корень, это что-то вроде отказа в доступе, потому что запись в 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

Для меня твой код работает идеально. Для других пользователей, которым нужны подробности об этом, я рекомендую этот сайт: http://ss64.com/vb/regread.html и http://ss64.com/vb/regwrite.html Обе ссылки подробно описывают процедуру, которую вы создаете.

Обязательно добавьте это:

      Function RunAsAdmin()
    If WScript.Arguments.length = 0 Then
        CreateObject("Shell.Application").ShellExecute "wscript.exe", """" & _
        WScript.ScriptFullName & """" & " RunAsAdministrator",,"runas", 1
        WScript.Quit
    End If
End Function

Он будет работать от имени администратора, и если он не работает, значит, ваш ключ неверен.

Другие вопросы по тегам