Condividi tramite


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: https://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 )