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:
‘
e deveria ficar assim: (com o valor FirewallGroup após TDI)
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 )