Como editar uma chave de registro MULTI_SZ via script


Recentemente estava em um projeto onde foi necessário aplicar um hotfix e algumas chaves de registro em mais de 1000 desktops. Quem tiver interesse em ver o artigo, segue o link: http://support.microsoft.com/kb/951624/en-us

Até aí sem grandes mistérios. O problema que uma destas chaves que deveria ser alterada era do formato MULTI_SZ, ou seja, uma lista. O artigo exigia que uma nova entrada na lista fosse criada após o valor TDI.

A lista original estava assim:

image

e deveria ficar assim: (com o valor FirewallGroup após TDI)

image

Para isso desenvolvi um script VBS que lê o valor da chave, testa se o valor FirewallGroup já existe, senão existir, lê cada um dos valores até chegar em TDI quando acrescenta o valor FirewallGroup.

Segue o script para fazer esta modificação.

OBS.: Caso precisa alterar outro valor MULTI_SZ) altere as linhas 4 e 5 e a lógica de teste do array.

 

const HKEY_LOCAL_MACHINE = &H80000002
strComputer = "."
Set objReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\"& strComputer & "\root\default:StdRegProv")
strKeyPath = "SYSTEM\CurrentControlSet\Control\ServiceGroupOrder"
strValueName = "List"
Return = objReg.GetMultiStringValue(HKEY_LOCAL_MACHINE,strKeyPath,strValueName,arrValues)
i=0
If (Return = 0) And (Err.Number = 0) Then  
    For Each strValue In arrValues
        If strValue <> "FirewallGroup" then
            If strValue = "TDI" then
                ReDim Preserve aNewValues(i)
                aNewValues(i) = strValue
                i = i + 1
                ReDim Preserve aNewValues(i)
                aNewValues(i) = "FirewallGroup"
                i = i + 1
            Else
                ReDim Preserve aNewValues(i)
                aNewValues(i) = strValue
                i = i + 1
            End If
        End If
    Next
Else
    Wscript.Echo "GetMultiStringValue failed. Error = " & Err.Number
End If
nRet = objReg.SetMultiStringValue(HKEY_LOCAL_MACHINE , strKeyPath, strValueName , aNewValues )

Comments (0)

Skip to main content