none
Script excluir chaves do registro recursivamente. RRS feed

  • Pergunta

  • Ola a todos.

                 Estou desenvolvendo um script que exclui algumas chaves do registro do windows no qual possue subchaves,  tentei utilizar o método "DeleteKey", mas ele somente exclui a chave do registro se ela nao contiver subchaves descobri isso após alguns testes então juntei alguns pedaços de scripts que encontrei na internet e fui montando ate chegar no código abaixo, ele tenta excluir recursivamente

     

     

    Code Block

    option explicit
    Dim strComputer, objRegistry, strKeyPath, arrSubkeys, strSubkey
    Const HKEY_LOCAL_MACHINE = &H80000002
    strComputer = "."
    Set objRegistry = GetObject("winmgmts:\\" & strComputer & "\root\default:StdRegProv")
     
    strKeyPath = "SYSTEM\teste"
    DeleteSubkeys HKEY_LOCAL_MACHINE, strKeypath

    strKeyPath = "SYSTEM\teste1"
    DeleteSubkeys HKEY_LOCAL_MACHINE, strKeypath

    strKeyPath = "SYSTEM\teste2"
    DeleteSubkeys HKEY_LOCAL_MACHINE, strKeypath 

    Sub DeleteSubkeys(HKEY_LOCAL_MACHINE, strKeyPath)
        objRegistry.EnumKey HKEY_LOCAL_MACHINE, strKeyPath, arrSubkeys
        If IsArray(arrSubkeys) Then
            For Each strSubkey In arrSubkeys
                wscript.echo strSubkey
                DeleteSubkeys HKEY_LOCAL_MACHINE, strKeyPath & "\" & strSubkey
            Next
        End If
        objRegistry.DeleteKey HKEY_LOCAL_MACHINE, strKeyPath
    End Sub

     

     

    Bom o script acima funciona? sim e não hehe, em partes, notei que ao inserir o parametro "option explicit", ele não funciona mas se tiro esse parametro, comento ele por exemplo, o script funciona, exclui as chaves e subchaves, não entendi o porque gostaria de saber se alguém já passou por isso, li sobre o "option explicit", que é uma boa prática de programação, então devemos fazer da forma correta, mas se com o parametro não funciona, a boa pratica de programação que vai pro beleleu rs. Desde já agradeço.

     

    Atenciosamente.

    terça-feira, 18 de dezembro de 2007 20:37

Respostas

  • Vejam o exemplo que tá nesse artigo do KB:

    http://support.microsoft.com/?scid=kb%3Ben-us%3B279847&x=18&y=17


    []s


    --
    Vinicius Canto
    MVP Windows Server - Admin Frameworks
    MCP Windows 2000 Server, Windows XP e SQL Server 2000
    Bacharelando em Ciências da Computação - USP

    Blog sobre Scripting e Windows Powershell: http://viniciuscanto.blogspot.com
    terça-feira, 25 de dezembro de 2007 04:06
    Moderador

Todas as Respostas

  • Ola novamente,

     

                  Fiz alguns testes aqui, e acho que descobri o problema, mas não sei como resolver pelo menos até agora o google não me disse hehehe o que acho que pode estar acontecendo e que quando uso a função e dentro dela tento usar a variável objRegistry, ele não acha definição para esta variavel dentro do escopo da função somente fora, e como estaria usando a opção "option explicit", diz que se uma variavel não é declarada ela não pode ser usada, então ele tenta sei la usar fora da função e justamente onde dá o erro de "memory is locked" por querer acessar uma área de memória (variável) proibida ou seja ele não entende que a variavel é global, estou procurando algo que explique como funciona os criterios adotados pelo vbscript para tratamento de variaveis globais e locais se alguem já passou por esse problema e puder ajudar desde já agradeço.

     

    Atenciosamente.

     

     

    terça-feira, 18 de dezembro de 2007 21:02
  • Ricardo, você tem razão, a função "Option Explicit" faz com que você tenha que declarar todas as variáveis que você vai utilizar no seu script, independente de ser global ou local. Mas para o seu problema o script abaixo é mais simples e resolve, pois no script que você postou você está especificando quais são as sub-chaves, neste abaixo e lista todas e as apaga e por fim apaga a chave raiz.

     

    Code Block

    Const HKEY_LOCAL_MACHINE = &H80000002

    strComputer = "."
     
    Set oReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & _
        strComputer & "\root\default:StdRegProv")
     
    strKeyPath = "SOFTWARE\teste"
    oReg.EnumKey HKEY_LOCAL_MACHINE, strKeyPath, arrSubKeys
     
    For Each subkey In arrSubKeys
     oReg.DeleteKey HKEY_LOCAL_MACHINE, strKeyPath & "\" & subkey
    Next
     
    oReg.DeleteKey HKEY_LOCAL_MACHINE, strKeyPath

     

     

     

    quarta-feira, 19 de dezembro de 2007 12:49
  • Vejam o exemplo que tá nesse artigo do KB:

    http://support.microsoft.com/?scid=kb%3Ben-us%3B279847&x=18&y=17


    []s


    --
    Vinicius Canto
    MVP Windows Server - Admin Frameworks
    MCP Windows 2000 Server, Windows XP e SQL Server 2000
    Bacharelando em Ciências da Computação - USP

    Blog sobre Scripting e Windows Powershell: http://viniciuscanto.blogspot.com
    terça-feira, 25 de dezembro de 2007 04:06
    Moderador